當使用jQuery.load
動態加載HTML內容到網頁,什麼是「重新綁定」任何處理程序的最佳方式是什麼?jQuery.bind'ing與jQuery.load加載的東西
通常你在jQuery.ready
綁定處理程序,但它們顯然不適用於新加載的內容。這是在加載內容的外部和內部使用的處理程序,因此只需將它們綁定在load
成功函數中並不是很好。
當使用jQuery.load
動態加載HTML內容到網頁,什麼是「重新綁定」任何處理程序的最佳方式是什麼?jQuery.bind'ing與jQuery.load加載的東西
通常你在jQuery.ready
綁定處理程序,但它們顯然不適用於新加載的內容。這是在加載內容的外部和內部使用的處理程序,因此只需將它們綁定在load
成功函數中並不是很好。
當訂閱這些處理程序時,您可以使用.on
函數,該函數允許您訂閱甚至不存在的DOM元素,並且當它們添加時訂閱將完成。在jQuery 1.7中引入了.on
函數。如果您使用的是舊版本,則可以使用.delegate
函數來實現jQuery 1.4.2中引入的相同效果。如果您使用的是更舊的版本,則可以使用.live
方法。
這裏是你如何可以訂閱一些元素的click事件(現有的或沒有現有的將要在將來添加)一個例子:
$('#someParentElement').on('click', '#someElement', function() {
});
小附錄:如果您不使用'$(document)'調用它,而是使用最近的非動態父項,您將獲得更好的性能。 – bhamlin 2012-03-20 21:43:36
@bhamlin,同意。我已經更新了我的答案。 – 2012-03-20 21:44:29
您需要委派了新的內容事件靜態父元素,例如:
$("#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.
})
不要綁定任何新的事件處理程序。查看[事件委託](http://api.jquery.com/on/#direct-and-delegated-events)上的文檔。 – 2012-03-20 21:31:58