2012-03-20 55 views
1

當使用jQuery.load動態加載HTML內容到網頁,什麼是「重新綁定」任何處理程序的最佳方式是什麼?jQuery.bind'ing與jQuery.load加載的東西

通常你在jQuery.ready綁定處理程序,但它們顯然不適用於新加載的內容。這是在加載內容的外部和內部使用的處理程序,因此只需將它們綁定在load成功函數中並不是很好。

+2

不要綁定任何新的事件處理程序。查看[事件委託](http://api.jquery.com/on/#direct-and-delegated-events)上的文檔。 – 2012-03-20 21:31:58

回答

5

當訂閱這些處理程序時,您可以使用.on函數,該函數允許您訂閱甚至不存在的DOM元素,並且當它們添加時訂閱將完成。在jQuery 1.7中引入了.on函數。如果您使用的是舊版本,則可以使用.delegate函數來實現jQuery 1.4.2中引入的相同效果。如果您使用的是更舊的版本,則可以使用.live方法。

這裏是你如何可以訂閱一些元素的click事件(現有的或沒有現有的將要在將來添加)一個例子:

$('#someParentElement').on('click', '#someElement', function() { 

}); 
+1

小附錄:如果您不使用'$(document)'調用它,而是使用最近的非動態父項,您將獲得更好的性能。 – bhamlin 2012-03-20 21:43:36

+0

@bhamlin,同意。我已經更新了我的答案。 – 2012-03-20 21:44:29

3

您需要委派了新的內容事件靜態父元素,例如:

$("#myDiv").load(myUrl); 

$("#myDiv").on('click', '#myElement', function() { 
    // do stuff when #myElement (which was part of the HTML 
    // returned in the load() call) is clicked. 
}) 

這裏假設你正在使用jQuery 1.7+,如果沒有,用delegate()

$("#myDiv").delegate('#myElement', 'click', function() { 
    // do stuff when #myElement (which was part of the HTML 
    // returned in the load() call) is clicked. 
})