Всплывающее событие jQuery .delegate () или .live () после события щелчка - PullRequest
2 голосов
/ 05 августа 2010

Я пробовал так много разных возможностей, чтобы достичь того, что, на мой взгляд, должно быть простым выполнением кода.Я загружаю объекты DOM с сервера через .load().Один из загруженных элементов - это текстовое поле ввода с датой.Я хочу загрузить jdpicker (плагин datepicker), когда я нажимаю на поле ввода.Из-за поведения .live() и .delegate(), даже когда я использую .die() или .undelegate() соответственно, я не могу заставить всплывающее окно выбора даты работать нормально.Он либо всплывает, позволяет мне щелкнуть один объект в окне, а затем сразу же закрывается (я не могу перемещаться по месяцам, годам без закрытия окна), или окно всплывает, и каждый последующий щелчок повторно выполняет код, производящий несколько экземпляров.DatePicker.

Я пробовал различные комбинации .live(), .delegate(), .one() без удачи.Я проверил средство выбора даты в главном окне и знаю, что оно там работает нормально.Я мог бы опубликовать код, но не уверен, какая из десяти попыток, которые я сделал, будет лучшим примером.Я могу показать свою последнюю попытку.

У кого-нибудь есть подходящий пример для этого?Спасибо!


Обновление

Я отредактировал код следующим образом:

$("#edit-entry").load("/edit/", { id:id }, function(){
                $('.jdpicker').one('click', function(){
                    $(this).jdPicker();
                });
});

Это зависит от становленияполный ответ.DatePicker больше не вызывает несколько экземпляров, и это хорошо, но я все еще не могу перемещаться по его элементам управления (выбор месяца, года).Если я нажму на следующий месяц, он загрузится и закроется.В следующий раз, когда я нажму на него, он откроется в следующем месяце.Итак, это работает, но, конечно, не желательно.Есть предложения?

1 Ответ

0 голосов
/ 05 августа 2010

Вы просто не можете сделать это с "живым" или "делегатом". Дело в том, что вам нужно явно применить инициализацию вашего плагина после успешного выполнения ".load ()".

изменить & mdash; внесенные вами изменения, вероятно, не сработают. Вот ваш код на английском языке:

"Получить содержимое с URL-адреса" / edit / "и поместить его в элемент с идентификатором" edit-entry ". Когда это содержимое будет получено, затем привязать одноразовый обработчик события к функции" click " все элементы с классом 'jdpicker'. В этом обработчике событий установите функциональность 'jdPicker' для элемента. "

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

$("#edit-entry").load("/edit/", { id:id }, function(){
    $('.jdpicker').each(function(){
        $(this).jdPicker();
    });
});
...