我使用Brandon Aaron的可擴展插件在窗體中自動生成我的textareas,並且它工作正常。 問題是我通過ajax加載了很多頁面,所以我需要將插件方法重新綁定到通過ajax加載的textareas。如何自動綁定通過ajax加載的內容的插件初始化
是有辦法做到這種方法就像
$("textarea").expandable();
通過現場()或委託()jQuery中調用。它會使我的代碼更清潔。
我使用Brandon Aaron的可擴展插件在窗體中自動生成我的textareas,並且它工作正常。 問題是我通過ajax加載了很多頁面,所以我需要將插件方法重新綁定到通過ajax加載的textareas。如何自動綁定通過ajax加載的內容的插件初始化
是有辦法做到這種方法就像
$("textarea").expandable();
通過現場()或委託()jQuery中調用。它會使我的代碼更清潔。
的.liveQuery
plugin仍具有使用這裏,它不是完全的jQuery核心的.live()
取代,這裏是你的例子是如何工作的:
$("textarea").liveQuery(function() {
$(this).expandable();
});
.livequery()
其實手錶新的元素,不同於.live()
監聽事件爲了鼓舞DOM,它們以非常不同的方式運行。
只有事件可以綁定,插件必須用每個新元素調用。
[編輯]
事件不會綁定到新的元素,事件剛好趕上在冒泡/道路上的元素捕獲階段,允許添加新的元素和事件尚可處理。
插件綁定到由init構造函數返回的元素集。插件開發者需要在他們的插件中使用事件委託來捕獲被添加到元素範圍內的新元素(或者他們可以到文檔外並與其他插件發生衝突)。
如果是這樣的話,這聽起來像是一個插件的好主意。像live-plugin-binding。 很多插件會爲jQuery添加一個應該調用來初始化的方法。如果插件可以像在線直播一樣處理這個問題,那將是非常棒的。 – 2010-04-06 17:35:14
我個人會這樣做的方式是讓插件初始化一個函數,並在ajax加載完成時調用該函數。我的筆記本電池電量很低,所以我的語法可能有點偏離,但是這個想法就在那裏。
function foo()
{
$('.classSelector').plugin();
}
$('.eventListener').load('url', function()
{
foo();
})
謝謝你,這實際上是我的一天。在1.4發佈之後,我完全忘記了liveQuery插件,因爲他們添加了實時提交和模糊,這是liveQuery無法實現的。謝謝你提醒我。 – 2010-04-07 13:31:17