Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.02.2013, 14:12
Кандидат Javascript-наук
Отправить личное сообщение для Зосимов Посмотреть профиль Найти все сообщения от Зосимов
 
Регистрация: 11.02.2013
Сообщений: 102

Не срабатывает datepicker
всем привет.
у меня следующая проблема -
$('#more').click(function(){
     
$('#form-inner').filter(':first').clone().appendTo('.frm');   
  
    });


поясню на всякий - при клике на кнопку я копирую поля формы (есть поля уже готовые, но если надо больше нажимаем кнопку и добавляем).

одно из полей формы имеет class='datepicker'. Так вот при добавлении полей datepicker не срабатывает в добавленных полях.

подскажите плиз почему это происходит?
Ответить с цитированием
  #2 (permalink)  
Старый 11.02.2013, 14:20
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

я так понимаю, что к классу datepicker у вас привязано какое-то событие?

Это событие не срабатывает потому что при назначении обработчиков данного элемента не существует и при добавлении его вам надо переназначить обработчики.
Ответить с цитированием
  #3 (permalink)  
Старый 13.02.2013, 10:11
Кандидат Javascript-наук
Отправить личное сообщение для Зосимов Посмотреть профиль Найти все сообщения от Зосимов
 
Регистрация: 11.02.2013
Сообщений: 102

мм
я пробовал так
$('#more').click(function(){
$('#form-inner').filter(':first').clone().appendTo('.frm');  
$( ".datepicker" ).datepicker();
    });


нет?
или подскажите подробнее как переназначить обработчик?

и забыл сказать что к datapicker привязано событие выбора даты jQuery
Ответить с цитированием
  #4 (permalink)  
Старый 13.02.2013, 11:52
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

когда вы пишете:
$('блаблабла').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 будут выполнять свои действия дважды, трижды ... в зависимости от количества переназначений.

Последний раз редактировалось tsigel, 13.02.2013 в 12:02.
Ответить с цитированием
  #5 (permalink)  
Старый 13.02.2013, 13:37
Кандидат Javascript-наук
Отправить личное сообщение для Зосимов Посмотреть профиль Найти все сообщения от Зосимов
 
Регистрация: 11.02.2013
Сообщений: 102

спасибо за подробный ответ.
но у меня никак не получается ((

в скопированных полях так же не работает функция datepicker()

$('#form-inner').filter(':first').clone().appendTo('.frm');
$('.frm').find('.datepicker').last().click(function() {datepicker()});


пробовал так
Ответить с цитированием
  #6 (permalink)  
Старый 13.02.2013, 13:58
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Почему не работает? Что пишет консоль? Выложите больше кода. Целиком что копируете, куда и саму функцию "datepicker()"

Если при таком варианте по клику выдает 1

Сообщение от tsigel
$('#form-inner').filter(':first').clone().appendTo('.frm');
$('.frm').find('.datepicker').last().click(function() {alert(1)})
значит беда в вашей функции

Последний раз редактировалось tsigel, 13.02.2013 в 14:01.
Ответить с цитированием
  #7 (permalink)  
Старый 13.02.2013, 14:25
Кандидат Javascript-наук
Отправить личное сообщение для Зосимов Посмотреть профиль Найти все сообщения от Зосимов
 
Регистрация: 11.02.2013
Сообщений: 102

консоль ошибок не выдает.
при вашем коде выдает 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 работает только на уже существующие поле, а на добавленные нет.

может я вообще не тот подход выбрал ?
Ответить с цитированием
  #8 (permalink)  
Старый 13.02.2013, 14:31
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Ну во первых не надо делать на сайте несколько одинаковых id, это не красиво, сделайте классами.

Выложите ещё функцию datepicker(). И при каком событие должна выполняться ваша функция? при фокусе?

Последний раз редактировалось tsigel, 13.02.2013 в 14:33.
Ответить с цитированием
  #9 (permalink)  
Старый 13.02.2013, 14:40
Кандидат Javascript-наук
Отправить личное сообщение для Зосимов Посмотреть профиль Найти все сообщения от Зосимов
 
Регистрация: 11.02.2013
Сообщений: 102

функция выполняется при клике на поле инпут
вот такой - http://jqueryui.com/datepicker/
Ответить с цитированием
  #10 (permalink)  
Старый 13.02.2013, 14:51
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интервалы дат в jQuery UI Datepicker treef jQuery 1 17.06.2016 02:24
AJAX запрос в Internet Explorer срабатывает через раз nikolayseo jQuery 5 13.11.2012 00:13
Нажатие по дате в календаре срабатывает только со второго клика afr0 Events/DOM/Window 4 31.10.2012 13:39
Не срабатывает обертка фун-и в IE8 zilker Internet Explorer 6 16.07.2012 18:54
jQuery DatePicker: формат даты при передаче в get запросе viko_rus jQuery 0 16.02.2011 13:33