我使用jQuery在$(document).ready()處理程序中附加一些插件 - 例如$(「。date」)。datepicker )。然而,當我使用$(「... html ...」),例如從$ .ajax(..,success(data){})或ajaxForm({target:...})加載內容時, ,document.ready()顯然不會被調用。更新:如指出它是調用,但我仍然不知道部分/元素被加載。
我不能再做ready(),因爲它會再次將插件重新連接到已有的元素。因此,我必須在每種情況下手動執行此操作,例如,我成功(數據){item = $(data); initDatePickerEtc(項目); }。
有沒有更好的方法?
有Live Query插件可以處理事件。有什麼可以讓我跟蹤HTML元素的創建並執行操作嗎?像
$.oncreation(".date", function() { $(this).datepicker(); });
// or at least
$.oncreation(function() { $(this).find(".date").datepicker(); });
大的東西,如果它也將處理現有的元素...像實況查詢工作在點擊()調用的時候都存在,而未來創建的元素。
請注意,我會很高興跟蹤由jQuery創建的元素。所以它可能是jQuery爲它的html()函數提供了擴展點,我猜。現在,從jQuery源也沒有:
html: function(value) {
return value === undefined ?
(this[0] ?
this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") :
null) :
this.empty().append(value);
},
也許,如果我取代HTML(),使得即使3-第三方插件(比如給ajaxForm)會用我的版本(這將觸發$ .creation回調),而不是默認的jQuery的一個...它會工作嗎?這種方法存在問題 - 它不僅僅是html(),還有append()等等,只有當$(「」)的結果被附加到文檔時,才能獲得事件。因爲當它在內存中時,我不需要datepicker()。
我將需要從那裏獲得對加載部分的引用。如果我做$(document).ready(function(){$(「*」).css('background-color','red');});在加載的部分,整個頁面將變成紅色而不是僅加載的div。 – queen3 2009-10-19 20:09:10
是的。我解決了這個問題,通過在元素中添加一個類並在再次執行時進行篩選:$('*')。not('。doneAlready')。css(...)。addClass('doneAlready'); – 2009-10-19 20:13:07
好的方法,並將工作,+1。我想知道在全局數組中跟蹤它是否更好 - 我實際上關心的是大頁面並將類添加到每個元素中......看起來像一個黑客。所以我希望有更清晰的方法。但如果沒有人認爲我必須接受這個解決方案。 – queen3 2009-10-19 20:20:49