2009-10-18 2 views
7

Спасибо, что посмотрели, все искренне полезные ответы опротестованы. У меня есть поля ввода даты, которые есть там, где загружается страница, и пучок, который генерируется динамически. Вместо вызова .datepicker() в этом классе каждый раз, когда генерируется новый экземпляр, я использую .live, но он, похоже, не работает. Любая идея почему?JQuery .live работает, но не с .datepicker

$("input[name=myfav]").live("click", function(){ 
    $(this).datepicker({ 
     /* some options here */ 
    }); 
}); 

Следует отметить, что он отлично работает с автозаполнением, например.

$("input[name=mytwo]").live("click", function(){ 
    $(this).autocomplete("somefile.php"); 
}); 

ответ

26

Вот статья о DatePicker используя .live-событие в JQuery:

http://www.vancelucas.com/blog/jquery-ui-datepicker-with-ajax-and-livequery/

Проблема заключается в том, что Datepicker работает путем привязки к событию фокусировки() по умолчанию, но по состоянию на jQuery 1.3.2 событие «focus» не может контролироваться функцией «живого» события.

Вот обходной путь от сайта ::

<script type="text/javascript"> 
$(function(){ 
    $('input.calendarSelectDate').live('click', function() { 
     $(this).datepicker({showOn:'focus'}).focus(); 
    }); 
}); 
</script> 

EDIT: Это решение больше не нужно, как JQuery 1.4.1+ Теперь не поддерживает фокус и размытие события для живых() , (Спасибо @Chris S)

+0

Спасибо за ответ. Я знал, что это плагин, потому что другие плагины работают нормально. Это проясняет это. – Chris

+2

+1 Ты только что сэкономил мне много времени. –

+0

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

4

Стоит отметить, что JQuery 1.4.1+ в настоящее время не поддерживает фокус и размытие события для живых(), так что обходной путь, в то время как здорово, это больше не нужно - версия на Orignal сайта работает отлично!

+1

Это не совсем работа для меня, но $ ("дата. ") Жить (" фокус", функция() { \t \t $ (это) .datepicker ({ \t \t \t DateFormat:. «Дд/мм/yy ' \t \t}) \t}); сделал – brad

7

Это то, что я в конечном итоге использовал. Он принимает преимущество live и focus в новой JQuery

$.datepicker.setDefaults({ dateFormat: 'yy-mm-dd', ... }); 
$('input.date').live('focus', function() { 
    $(this).datepicker().datepicker('show'); 
    true; 
}); 
0

Update: По JQuery 1.7, метод .live() является устаревшим. 1.7, Используйте .on() для присоединения обработчиков событий. Ссылка: http://api.jquery.com/live/

Смежные вопросы