2012-03-20 56 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. 
})