проблема при клонировании JQuery UI DatePicker - PullRequest
15 голосов
/ 14 марта 2010

У меня есть div, в котором есть указатель даты. Я использую что-то вроде этого, чтобы клонировать это:

mydiv = $('#someDiv');

// works fine so far
mydiv.find('input.datefield').datepicker();

// clone without the events and insert
newDiv = myDiv.clone(false).insertAfter(myDiv);

// datepicker won't re-init if this class is present
newDiv.find('.hadDatepicker').removeClass('hadDatepicker');

// reinitialize datepicker
newDiv.find('input.datefield').datepicker();

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

Я пытался уничтожить (несуществующий) экземпляр раньше, как это:

newDiv.find('input.datefield').datepicker('destroy').datepicker();

Не повезло ..

Я проверил, как он отслеживает экземпляры, и вручную очистил данные следующим образом:

newDiv.find('input.datefield').data('datepicker', false).datepicker('destroy').datepicker();

Все еще не повезло.

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

Я действительно не знаю, что еще проверить сейчас ..

Ответы [ 12 ]

0 голосов
/ 14 марта 2010

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

Попробуйте изменить эту последнюю строку на что-то вроде:

newDiv.find('input.datefield').attr('id', 'newDatePicker').attr('name', 'newDatePicker').datepicker();
0 голосов
/ 14 марта 2010

А как насчет изменения заказа?

mydiv = $('#someDiv');

// clone without the events and insert
newDiv = myDiv.clone(false).insertAfter(myDiv);

// datepicker won't re-init if this class is present
// not necessary anymore
// newDiv.find('.hadDatepicker').removeClass('hadDatepicker');

newDiv.find('input.datefield').datepicker();

// datepicker attached as a last step
mydiv.find('input.datefield').datepicker();

Честно говоря, я не знаю, как работает DatePicker внутри.Я догадываюсь, что он хранит что-то в хранилище JQuery DOM.Давайте не будем копировать это любой ценой.

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

...