【发布时间】:2012-02-03 20:34:05
【问题描述】:
我正在使用 jQuery v.1.7.1,其中 .live() 方法显然已被弃用。
我遇到的问题是,当使用以下方法将 html 动态加载到元素中时:
$('#parent').load("http://...");
如果我之后尝试添加点击事件,它不会使用以下任何一种方法注册事件:
$('#parent').click(function() ...);
或
// according to documentation this should be used instead of .live()
$('#child').on('click', function() ...);
实现此功能的正确方法是什么?它似乎只适用于 .live() 对我来说,但我不应该使用这种方法。请注意,#child 是一个动态加载的元素。
谢谢。
【问题讨论】:
-
你为什么说"supposedly deprecated"?你不相信文档吗?
-
它没有应该被弃用:它被弃用。如果您查看jQuery doco for
.live(),它会告诉您如何重写.live()的现有用法以使用.delegate()或.on()(取决于您是否使用1.7+ 版本)。请注意,如果您添加一个带有.click()“之后”的处理程序,即在动态加载元素之后,它应该可以工作 - 唯一的问题是尝试使用.click()before 动态分配加载元素。 -
我将措辞改为“显然”,因为这基本上就是我的意思。无论如何,我现在明白了,显然由于 .load() 事件是异步的,那么 #child 元素只能在成功处理程序中被可靠地识别,这是有道理的。
标签: javascript jquery events dom handler