Не срабатывает datepicker
всем привет.
у меня следующая проблема -
$('#more').click(function(){
$('#form-inner').filter(':first').clone().appendTo('.frm');
});
поясню на всякий - при клике на кнопку я копирую поля формы (есть поля уже готовые, но если надо больше нажимаем кнопку и добавляем). одно из полей формы имеет class='datepicker'. Так вот при добавлении полей datepicker не срабатывает в добавленных полях. подскажите плиз почему это происходит? |
я так понимаю, что к классу datepicker у вас привязано какое-то событие?
Это событие не срабатывает потому что при назначении обработчиков данного элемента не существует и при добавлении его вам надо переназначить обработчики. |
мм
я пробовал так
$('#more').click(function(){
$('#form-inner').filter(':first').clone().appendTo('.frm');
$( ".datepicker" ).datepicker();
});
нет? или подскажите подробнее как переназначить обработчик? и забыл сказать что к datapicker привязано событие выбора даты jQuery |
когда вы пишете:
$('блаблабла').click(функция);
При загрузке страницы и инициализации скриптов скрипт проходит по странице и говорит что все "блаблабла" при клике должны сделать "функция". Так назначаются обработчики. Чтобы назначить обработчик на новый datepicker вам необходимо:
$('#form-inner').filter(':first').clone().appendTo('.frm').find('.datepicker')./*обработчик*/(/*функция*/);
Например:
$('#form-inner').filter(':first').clone().appendTo('.frm').find('.datepicker').click(function() {alert(1)})
или, что то же самое:
$('#form-inner').filter(':first').clone().appendTo('.frm');
$('.frm').find('.datepicker').last().click(function() {alert(1)})
Работая с объектами jQuery вам надо знать, что эти объекты всегда возвращают объект с которым вы работаете (за исключением тех случаев когда их вывод должен быть задан явно. Т.е. toggleClass() вернет объект к которому он применен, а text() вернет текст) Обратите внимание, что при назначении обработчика в скобках можно написать название функции, чтобы не повторять уже написанный код. Очень важно что вам надо переназначить не все обработчики, а только тот элемент которого вы добавили, в противном случае ранее существовавшие datepicker будут выполнять свои действия дважды, трижды ... в зависимости от количества переназначений. |
спасибо за подробный ответ.
но у меня никак не получается (( в скопированных полях так же не работает функция datepicker()
$('#form-inner').filter(':first').clone().appendTo('.frm');
$('.frm').find('.datepicker').last().click(function() {datepicker()});
пробовал так |
Почему не работает? Что пишет консоль? Выложите больше кода. Целиком что копируете, куда и саму функцию "datepicker()"
Если при таком варианте по клику выдает 1 Цитата:
|
консоль ошибок не выдает.
при вашем коде выдает 1 в окне алерт. а это разве не правильно? вообще я пытаюсь скопировать примерно вот что
<form class="frm" action="add.php" method="post">
<div id="form-inner">
<input class='inp' type='text' name='city' placeholder="город"/>
<input class='datepicker input-small' name='start_date' type="text" placeholder="дата" />
</div>
<input class="btn" name="add_input" type="submit" value="Сохранить" />
</form>
<div class="btn" id="more"> Еще</div>
таким образом, я хочу при нажатии на Еще я хочу добавлять div с парой полей. столько, сколько нужно
$('#more').click(function(){
$('#form-inner').filter(':first').clone().appendTo('.frm');
$('.frm').find('.datepicker').last().click(function() {datepicker()
});
});
при таком варианте как и при моем
$('#more').click(function(){
$('#form-inner').filter(':first').clone().appendTo('.frm');
$( ".datepicker" ).datepicker();
});
datepicker работает только на уже существующие поле, а на добавленные нет.может я вообще не тот подход выбрал ? |
Ну во первых не надо делать на сайте несколько одинаковых id, это не красиво, сделайте классами.
Выложите ещё функцию datepicker(). И при каком событие должна выполняться ваша функция? при фокусе? |
функция выполняется при клике на поле инпут
вот такой - http://jqueryui.com/datepicker/ |
это же плагин, вам надо подключить его так же как вы подключали его при загрузке страницы.
|
| Часовой пояс GMT +3, время: 23:11. |