6
votes

Multiple DatePicker Problème avec le même ID

Voici mon problème:

$('.datepick1').datepicker();
$('.datepick2').datepicker();
$('.datepick3').datepicker();


4 commentaires

Pourriez-vous élaborer un peu plus sur votre problème? Un peu de code source, formatage et plus d'informations seraient utiles si vous voulez de bonnes réponses.


Valider. Valider. Valider. validator.w3.org Si votre balisage est cassé (indice: c'est), ce n'est pas déraisonnable de Attendez-vous à ce que JS se brise quand il essaie de le manipuler.


Vous avez l'idée des classes et des identifiants mélangés.


@Ben: Oui, cela semble comme ça. Je ne pouvais pas être absolument sûr qu'il n'y aurait pas d'autres entrées de catégorie DatePick1 sur la page, je l'ai donc laissé sortir de ma réponse, mais ...


5 Réponses :


12
votes

Vos trois entrées ont le même attribut ID sur eux. Vous ne pouvez pas faire cela, id attributs doit être unique dans le document . (Avoir le même nom , d'autre part, est bien sous formulaires - et commun, par exemple pour les boutons radio.)

EDIT Votre code a donc été publié pour Le commentaire ci-dessous veut être remplacé par: xxx


4 commentaires

Donc, j'ai une boucle (pour (i = 0; i à une table (avec beaucoup de TD), dans chaque TD, j'ai une carte d'entrée = date et une classe unique ( 'DatePick' + i) Ensuite, j'applique un dayspicker à chaque entrée après annexe. Voici un code source de bits [...] ajouté ($ (' ') .append ($ (newlivraison.template.date) .val (arguments.date_livraison) .attr ('id', "Date") .Addclass ('date _' + arguments.num) .DatePicker ()) .CSS ("vertical-align", "haut"))


ceci ajoutez un dayspicker à mon entrée, mais si je sélectionne une date, il modifie la première entrée (en premier tr), mais si je modifie l'ID de «date» à «Date _ '+ arguments.num => Ce travail, voici comment Je résolvai mon problème ... Conclusion: Si vous appliquez un daysPicker à un élément, assurez-vous qu'il n'y a pas d'autre élément de votre page qui a le même identifiant


btw, newlivraison.template.date est quelque chose comme "


@nameZero: Mais le but est que, peu importe si la classe est unique, l'ID doit être unique, pas la classe. Les classes ne doivent pas nécessairement être uniques à chaque élément (et sont quelque peu inutiles si elles sont). Quelque part dans ce code ci-dessus, vous avez .attr ('id', 'date') - c'est où votre problème est, vous avez besoin de chacun pour avoir un différent id.



7
votes

supposé être comme celui-ci xxx


0 commentaires

0
votes

Je rencontre un même problème, peut-être aider à quelqu'un.

Utilisez simplement les mêmes classes et avec la même profondeur, cela fonctionnera bien (au moins pour moi c'est).


0 commentaires

0
votes

Dans mon cas, j'ai le contrôle DatePicker sur l'un des dialogues. Cette boîte de dialogue utilise quelque chose.Cshtml. Sur cette page, il existe une disposition pour ajouter un enfant qui a le même type. Ainsi, la boîte de dialogue sur la boîte de dialogue Parent utilise également le même CSHTML, à la suite de laquelle l'ID de l'entrée est identique. Maintenant, lorsque je sélectionne une date sur la boîte de dialogue enfant, elle définit réellement la date à la boîte de dialogue Parent.

J'ai essayé des choses comme la spécification du nom du formulaire dans chaque boîte de dialogue .. comme xxx

Aucun d'entre eux n'a travaillé pour moi. Dans les deux cas, il définit la date de contrôle de la boîte de dialogue Parent.


0 commentaires

4
votes

Le problème réside dans le code JQuery DatePicker dans la fonction _attachhandlers. L'argument de la fonction est l'instance de l'actualité DatePicker 'Inst'. L'entrée correcte est inst.input. Mais l'ID 'n'est qu'une représentation à chaîne et vous ne pouvez jamais obtenir la bonne entrée si vous avez des identités en double. La solution de contournement facile consiste à remplacer l'argument 'ID' dans les fonctions du gestionnaire avec l'inst.input de sorte qu'il pointera de l'entrée correcte.

Également si vous regardez de plus près dans les fonctions du gestionnaire, vous pouvez voir qu'ils essaient d'être inverse Ingénieur à travers l'identifiant de retour à la bonne entrée ... Pourtant, cela vous obtiendra le premier élément correspondant avec cette sorcière ID N'EST PAS ce que nous voudrions. P> xxx pré>

et par $ (ins.input) nous renvoie inst.input Peut facilement le réparer avec ce minuscule réglage. P>

acclamations p>

code JQuery original UI.1.10.3 P>

    _attachHandlers: function(inst) {
        var stepMonths = this._get(inst, "stepMonths"),
            id = "#" + inst.id.replace( /\\\\/g, "\\" );
        inst.dpDiv.find("[data-handler]").map(function () {
            var handler = {
                prev: function () {
                    $.datepicker._adjustDate(inst.input, -stepMonths, "M");
                },
                next: function () {
                    $.datepicker._adjustDate(inst.input, +stepMonths, "M");
                },
                hide: function () {
                    $.datepicker._hideDatepicker();
                },
                today: function () {
                    $.datepicker._gotoToday(inst.input);
                },
                selectDay: function () {
                    $.datepicker._selectDay(inst.input, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
                    return false;
                },
                selectMonth: function () {
                    $.datepicker._selectMonthYear(inst.input, this, "M");
                    return false;
                },
                selectYear: function () {
                    $.datepicker._selectMonthYear(inst.input, this, "Y");
                    return false;
                }
            };
            $(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
        });
    },


2 commentaires

Cela marche ! Mais comment faire ça .... de manière propre?


Le plus propre serait de le réparer dans le code de l'interface utilisateur JQuery original. J'utilise toujours le fichier JQuery-UI auto modifié (1.10). Impossible de confirmer si cette erreur est toujours présente en 1.12 car il y avait une erreur de passerelle Bad JQuery Server sur DonWloading. Acclamations