Многочисленная проблема выбора даты с одним и тем же идентификатором - PullRequest
2 голосов
/ 12 марта 2010

вот моя проблема:

<input type="text" class="datepick1" id="date" />
<input type="text" class="datepick2" id="date" />
<input type="text" class="datepick3" id="date" />

тогда я применяю datepicker к dom (по имени класса)

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

=> три домика имеют указатель даты, но при выборе даты автоматически меняется первое (datepick1)

HELP

Ответы [ 5 ]

11 голосов
/ 12 марта 2010

Ваши три входа имеют одинаковый атрибут id. Вы не можете этого сделать, id атрибуты должны быть уникальными в документе . (С другой стороны, тот же name хорош в формах - и распространен, например, для переключателей.)

Редактировать Таким образом, ваш код, добавленный к комментарию ниже, необходимо изменить на:

$('<td></td>').append(
    $(NewLivraison.template.date)
        .val(arguments.date_livraison)
        .attr('id','date_' + arguments.num) // <== Note it's "id" we're making unique
        .addClass('date_' + arguments.num)  // <== You can probably drop this entirely
        .datepicker()
).css('vertical-align','top');
7 голосов
/ 12 марта 2010

Предполагается, что это так

<input type="text" id="datepick1" class="date" />
<input type="text" id="datepick2" class="date" />
<input type="text" id="datepick3" class="date" />

$('.date').datepicker();
0 голосов
/ 20 марта 2019

проблема заключается в коде jquery datepicker в функции _attachHandlers. Аргументом функции является экземпляр текущего указателя даты 'inst'. Правильный ввод - это inst.input. Но «id» - это только строковое представление, и вы никогда не сможете получить правильный ввод, если у вас есть дубликаты идентификаторов. Простой обходной путь - заменить аргумент id в функциях-обработчиках на inst.input, чтобы он указывал на правильный ввод.

Также, если вы присмотритесь к функциям обработчика, вы увидите, что они пытаются выполнить обратный инжиниринг через идентификатор обратно на правильный вход ... Тем не менее, это даст вам первый соответствующий элемент с этой ведьмой, а не то, что мы хотели бы.

var target = $(id),
    inst = this._getInst(target[0]);

И так как $ (inst.input) возвращает нам inst.input, мы можем легко исправить это с помощью этой крошечной настройки.

Приветствия

Оригинальный код jquery ui.1.10.3

    _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(id, -stepMonths, "M");
                },
                next: function () {
                    $.datepicker._adjustDate(id, +stepMonths, "M");
                },
                hide: function () {
                    $.datepicker._hideDatepicker();
                },
                today: function () {
                    $.datepicker._gotoToday(id);
                },
                selectDay: function () {
                    $.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
                    return false;
                },
                selectMonth: function () {
                    $.datepicker._selectMonthYear(id, this, "M");
                    return false;
                },
                selectYear: function () {
                    $.datepicker._selectMonthYear(id, this, "Y");
                    return false;
                }
            };
            $(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
        });
    },

Исправлено, заменен аргумент 'id' в функциях обработчика на 'inst.input'

    _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")]);
        });
    },
0 голосов
/ 22 апреля 2014

В моем случае, у меня есть элемент управления datepicker в одном из диалогов. Этот диалог использует Something.cshtml. На этой странице есть положение о добавлении дочернего элемента того же типа. Таким образом, диалоговое окно в родительском диалоговом окне также использует тот же файл cshtml, в результате чего идентификатор для ввода является тем же Теперь, когда я выбираю дату в дочернем диалоге, он фактически устанавливает дату в родительском диалоге.

Я пробовал что-то вроде указания имени формы в каждом диалоге .. как

* $("#frmChild .datepicker").datepicker({dateFormat: Globalize.getPatternForDatapicker()});

* $("#frmChild input[id=StartDate]").datepicker({dateFormat: Globalize.getPatternForDatapicker()});

Никто из них не работал для меня. В любом случае это установка даты в элементе управления в родительском диалоговом окне.

0 голосов
/ 05 февраля 2014

Я столкнулся с той же проблемой, может быть, помогу кому-то.

Просто используйте те же классы, и с той же глубиной все будет работать нормально (по крайней мере, для меня).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...