2011-09-22 73 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調用的開銷似乎比增益更大的成本。但如果您真的在尋找並且需要方便,那麼這可能是唯一的解決方案。