我知道当你动态创建一个元素时,你必须使用类似的东西:
$("#id").live("click", function() {
//something
});
现在我有这个:
$('#tdInput1').datepicker({
inline: true
});
我的问题是:如何使直播以便它可以与动态创建的元素进行交互。
答案 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 });
}
});