Привязать плагин jQuery к живому элементу

#jquery #jquery-plugins #bind

#jquery #jquery-плагины #привязать

Вопрос:

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

 $('.add-another').live('click', function()
{
   var self = $(this);
   var clonedElement = self.parents('.row').clone();

   clonedElement.find('input.datepicker').bind('click', function()
   {
       $(this).datepick({ rangeSelect: true });
   });
});
  

Я использую этот плагин (я не использую jQueryUI и не использую datepicker). Итак, как я могу привязать функцию плагина к клонированному / живому элементу?

РЕДАКТИРОВАТЬ: Вот демонстрационная версия jsFiddle.

Ответ №1:

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

Итак, это на самом деле не будет работать так, как задумывалось. Измените идентификатор на класс (т. Е. # на an .) и попробуйте еще раз 🙂

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

Редактировать: Вы привязывались к событию «click», что на самом деле было неправильно — вы можете создать datepicker одновременно с созданием HTML-элемента.

Вот новый код:

 $('.row input.datepicker').datepick({ rangeSelect: true });

$('span.add-another').live('click', function()
{
    var self = $(this);
    var clone = self.parents('.row').clone();

    $('input.datepicker', clone).datepick({ rangeSelect: true });
    $(clone).insertAfter(self.parents('.row')).hide().slideDown('fast');

    self.remove();
});
  

Кроме того, у меня для вас плохие новости — плагин datepicker не работает 🙂
Похоже, что сам datepicker способен отображать только один datepicker на странице.
Вам следует либо изучить, как отобразить несколько, либо просто использовать jQueryUI.

Как вы можете видеть, здесь только исходный объект имеет указатель даты: http://jsfiddle.net/qZn8d/7 / И здесь только у первого добавленного объекта есть указатель даты: http://jsfiddle.net/qZn8d/6 /

Итак, да, плагин сломан, извините 🙂

Комментарии:

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

2. Можете ли вы создать минимальную демонстрацию поведения jsfiddle? Это упростило бы отладку. jsfiddle.net

Ответ №2:

вы пытаетесь привязать функцию к клонированному объекту, которого еще нет в DOM. Вставьте его в dom

или

Используйте live вместо привязки к клонированному объекту