У меня была точно такая же проблема, как и у вас (на самом деле ваш вопрос возник во время моего поиска в Google).
Я считаю, что проблема в версии jQueryUI, которую вы используете, по сравнению с той, что была показана в jsFiddle @ ShadowScripter. Я столкнулся с этой проблемой, используя v1.8.17 и v1.8.18, но jsFiddle использует v1.8.16 (который не воспроизводит ошибку). Вот jsFiddle , который воспроизводит ошибку, используя v1.8.18.
Итак, я разошелся с v.18 против v.16, немного поменял код и нашел виновника:
В Datepicker.prototype._hideDatepicker
, postProcess()
определяется как:
v1.8.18:
var self = this;
var postProcess = function() {
$.datepicker._tidyDialog(inst);
self._curInst = null;
};
v1.8.16
var postProcess = function() {
$.datepicker._tidyDialog(inst);
this._curInst = null;
};
Таким образом, если щелкнуть label
при открытом datepicker
, this
в v.16 postProcess()
- это объект HTMLDivElement
, а в v.18 self
- Datepicker
объект. _curInst
является атрибутом Datepicker
, поэтому код в v.16 присваивает _curInst
неправильному объекту (HTMLDivElement
вместо Datepicker
). Эта ошибка исправлена в v.18, но в ней появилась ошибка «застрял в открытом состоянии».
Простое удаление self._curInst = null;
из v.18 исправляет ошибку «зависание при открытии». Я не уверен, с какими побочными эффектами это может возникнуть, но я не заметил никаких проблем во время первоначального тестирования, хотя ваши результаты могут отличаться.