2011-09-22 59 views
2

要附加日期选取器输入的元素,我使用日期选择器插件,像这样:附加功能(不活动)来动态创建的对象

$('.foo').simpleDatePicker(); 

我怎么会重视这个功能动态创建$('。foo')s,这样如果我在页面中追加另一个$('。foo')元素,那么simpleDatePicker函数已经连接了吗?

我宁愿在document.ready上做它,而不是每次附加它。 'live()'和'bind()'都不合适。

+2

您不能将另一个$(“#foo”)'附加到页面上,因为元素ID必须是唯一的。 –

+1

不幸的是,简单的答案是你不能。你所要求的是,每当一个带有某个选择器的元素(比如“input.datepicker”)被添加到文档中时,simpleDatePicker()就会自动运行。目前没有理想的方法来做到这一点,除了每次创建时都手动调用simpleDatePicker()。 –

+0

AFAIK当你追加它时需要做它(当然,假设它是一个不同的ID)我可能会尝试使用ID作为有效载荷来触发事件并绑定到该事件。 –

回答

2

你可以使用.live来使用后期绑定技术。

$(".foo:not(.live)").live('click',function(){ 
    $(this).addClass('live').datepicker().click(); 
    return false; 
}); 
+0

我非常喜欢这个解决方案 - 它不仅回答了最初的问题,您可能会从延迟加载中获得性能优势。 +1 – nrabinowitz

+0

伟大的答案,真正有趣的解决方案。谢谢,Tentonaxe。 –

0

可以重载jQuery的append方法,并建立一个规则到该应用.simpleDatePicker()所有.foo元素的重载方法。

这不是一个真正的解决方案,我会建议,但是,因为每个append调用的开销似乎比增益更大的成本。但如果您真的在寻找并且需要方便,那么这可能是唯一的解决方案。