Создание datepicker live-JQuery

Я знаю, когда вы создаете элемент динамически, вы должны использовать что-то вроде:

$("#id").live("click", function() {
    //something
});

сейчас у меня есть это:

$('#tdInput1').datepicker({
    inline: true
});

мой вопрос: как мне это сделать live таким образом, он может взаимодействовать с динамически созданными элементами.

4 ответов


по: С помощью jQuery .видео работает, но не со .datepicker

Это должно работать:

$("#tdInput1").live("click", function(){
    $(this).datepicker({ 
        inline: true 
    });
});

edit: этот ответ для более старых версий jQuery. Для jQuery 1.9+, пожалуйста, попробуйте ответ Вишала.


принятое решение не будет работать с событиями фокусировки клавиатуры.. поэтому мне пришлось перейти к следующему:

$('.parent').on('focusin', '.datepicker', function(e) {
    $(this).datepicker(options);
});

пришлось менять .live to .on поскольку jquery 1.9.1 не включает .live метод. Выше работает для событий мыши, а также в фокусе событий.


Вы имеете дело с двумя разными вещами. в jQuery live для привязки событий, в то время как datepicker не привязан специально к событию, а просто добавляет функциональность к элементу в данный момент времени.

единственная причина live работа с событиями заключается в том, что jQuery фактически присоединяет обработчик событий к элементу предка, и (благодаря тому, как события всплывают в javascript) предок фактически получает событие и делегирует его, как если бы он пришел из элемента. Принцип довольно сложный, но длинный и короткий, он может работать только с событиями.

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


Я думаю, что более правильное решение такое:

$('input.datepickerClass').live('focus', function(){
    if (false == $(this).hasClass('hasDatepicker')) {
        $(this).datepicker({ options });
    }
});