让datepicker直播 - JQuery

时间:2011-07-06 18:35:57

标签: jquery jquery-ui datepicker

我知道当你动态创建一个元素时,你必须使用类似的东西:

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

现在我有这个:

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

我的问题是:如何使直播以便它可以与动态创建的元素进行交互。

4 个答案:

答案 0 :(得分:19)

接受的解决方案不适用于键盘焦点事件..所以我不得不改为:

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

由于jquery 1.9.1不包含.live方法,因此必须将.on更改为.live。以上适用于鼠标事件以及键盘焦点事件。

答案 1 :(得分:11)

根据:Jquery .live works but not with .datepicker

这应该有效:

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

编辑:这个答案适用于旧版本的jQuery。对于jQuery 1.9+,请尝试Vishal的答案。

答案 2 :(得分:7)

你正在处理两件不同的事情。 jQuery的live用于事件绑定,而datepicker并不是专门与事件绑定,而只是在某个时刻向元素添加功能。

live处理事件的唯一原因是jQuery实际上将事件处理程序附加到祖先元素,并且(由于事件在javascript中冒泡),祖先实际上接收事件并将其委托为如果它来自元素。这个原则有点复杂,但又长而短,只能用于事件。

如果您想添加datepicker功能,只需在新元素创建后调用datepicker函数。

答案 3 :(得分:0)

我认为更合适的解决方案是:

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