我知道从 jQuery 1.7 开始,.live() 方法已被弃用。所以这就是我想出的:
$(document.body).on('click', '#list', function() {
console.log($(this));
});
这几乎可以达到目的并且相当于:
$('#list').live('click', function(){
console.log($(this));
});
他们都返回#listjQuery 对象,这就是我想要的。
然而,问题是当我传递 jQuery 对象作为第二个参数而不是字符串(这种情况经常发生)时,例如:
var list = $('#list');
$(document.body).on('click', list, function() {
console.log($(this));
});
控制台返回$(body)jQuery 对象。在这一点上这是没有用的。 ;)
有任何想法吗?
编辑:这里的问题是NOT如何访问示例 1 和 2 中受影响的对象 $('#list'),以及如何在示例 3 中访问它。
官方给出的答案已经很明确了docs:
以后不再推荐使用 .live() 方法
jQuery 的版本提供了更好的方法,而它没有
缺点。特别是在使用过程中会出现以下问题:
。居住():
- jQuery 在调用之前尝试检索选择器指定的元素
.live()
方法,这可能是
处理大型文档非常耗时。
- 不支持链接方法。例如,
$("a").find(".offsite, .external").live( ... );
is
not有效,但未按预期工作。
- 既然所有
.live()
事件附于document
元素,事件耗时最长且最慢
在处理它们之前可能的路径。
- Calling event.stopPropagation()在事件处理程序中对于停止事件处理程序无效
附在文件下方;该事件已经传播到
document
.
- The
.live()
方法以令人惊讶的方式与其他事件方法交互,例如,$(document).unbind("click")
删除所有点击处理程序
通过任何电话附加.live()
!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)