当我编写一些JavaScript时,我有一组界面按钮,在页面加载时分配了它们的事件。我的问题是动态创建的任何东西都不会收到这些事件。
例如,我正在制作一个URL检查程序,其工作是确保转到另一个域的任何链接都会显示一个退出界面,让用户知道他们要离开。在页面加载后创建的任何链接,发布ajax(没有双关语意图)或任何其他事件都不会像页面加载时那样存在。
在实践中,确保任何新创建的项目获得这些全球事件的最佳方法是什么?
我喜欢使用jQuery,但这确实是一个概念性的问题。
我是否应该创建一个重新应用任何全局链接效果的函数,或者除了简单地执行它之外还有更聪明的方法吗?
答案 0 :(得分:3)
如果使用jQuery,您可以使用 .live() 方法。
通常在绑定事件处理程序时,事件处理程序绑定到一组特定的元素。除非重新绑定,否则将来添加的元素不会收到事件处理程序。
jQuery的.live()方法通过将自己的特殊事件处理程序绑定到DOM树的根(依赖于事件冒泡)来解决这个问题。单击某个元素时,如果它没有直接附加事件处理程序,则该事件会使DOM树冒泡。 jQuery的特殊事件处理程序捕获事件,查看其目标并执行通过.live()分配给目标的任何用户指定的事件处理程序。
答案 1 :(得分:0)
查看jQuery的live函数。它允许您在加载期间创建控件时以及每当创建新控件时附加到事件。存在性能损失,但除非您要加载大量元素,否则它并不重要。
答案 2 :(得分:0)
您可以使用.live()
jQuery方法将侦听器添加到页面加载完成后创建的元素。使用退出链接的示例(如果我理解正确的话):
$(function(){
$('a.exitLink').live('click',function(event){ /* do stuff when a link of class exitLink is clicked */);
});
这将响应click
课程的任何链接上的exitLink
事件,无论其何时创建(onload
次之前或之后)。
希望这会有所帮助:)
答案 3 :(得分:0)
是的,简单地说,你之前可能已经有过这个:
$('selector').click(function () {});
将其替换为:
$('selector').live('click', function() {});