页面加载后Javascript处理事件

时间:2011-01-04 19:27:25

标签: javascript jquery javascript-events

当我编写一些JavaScript时,我有一组界面按钮,在页面加载时分配了它们的事件。我的问题是动态创建的任何东西都不会收到这些事件。

例如,我正在制作一个URL检查程序,其工作是确保转到另一个域的任何链接都会显示一个退出界面,让用户知道他们要离开。在页面加载后创建的任何链接,发布ajax(没有双关语意图)或任何其他事件都不会像页面加载时那样存在。

在实践中,确保任何新创建的项目获得这些全球事件的最佳方法是什么?

我喜欢使用jQuery,但这确实是一个概念性的问题。

我是否应该创建一个重新应用任何全局链接效果的函数,或者除了简单地执行它之外还有更聪明的方法吗?

4 个答案:

答案 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() {});