当我写一些JavaScript的时候,我有一组界面按钮,当页面加载的时候,它们的事件被分配。我的问题是任何动态创建的东西都不会接收这些事件。
例如,我正在做一个URL检查器,他的工作是确保任何链接到另一个域会弹出一个退出界面,让用户知道他们要离开。任何链接在页面加载后创建,发布 AJAX (没有双关语)或任何东西都不会像页面加载时存在的那样自然发生该事件。
在实践中,什么是确保任何新创建的项目获得此类全局事件的最佳方法?
我喜欢使用jQuery,但这实际上是一个概念问题。
我是否应该创建一个函数来重新应用任何全局链接效果,或者除了逐块执行之外,是否有更聪明的方法?
4条答案
按热度按时间kzipqqlq1#
如果使用jQuery,则可以使用**.live()**方法。
通常在绑定事件处理程序时,该事件处理程序被绑定到一组特定的元素。将来添加的元素不会接收该事件处理程序,除非重新绑定。
jQuery的.live方法通过将其自己的特殊事件处理程序绑定到DOM树的根来解决此问题(依赖于事件冒泡)。当你点击一个元素时,如果它没有直接附加事件处理程序,那么这个事件就会在DOM树中冒泡。jQuery的特殊事件处理程序会捕捉这个事件,查看它的目标,并执行任何用户指定的事件处理程序,这些事件处理程序是通过.live()分配给目标的。
uxh89sit2#
看看jQuery的live函数。它允许你在加载过程中创建控件时以及创建新控件时附加到事件。这会有性能损失,但除非你加载了很多元素,否则不会很明显。
pgky5nke3#
您可以使用
.live()
jQuery方法向页面加载完成后创建的元素添加侦听器,使用您的退出链接示例(如果我理解正确的话):这将响应
exitLink
类的任何链接上的click
事件,而不管它是何时创建的(在onload
触发之前或之后)。希望这有帮助:)
avwztpqn4#
是的,简单地说,你以前可能有过这样的经历:
将其改为: