проблема заключается в коде 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")]);
});
},