jQuery live()与1.7+;
我知道在jQuery1.7中,.live()方法已被弃用。这就是我想到的:jQuery live()与1.7+;,jquery,live,Jquery,Live,我知道在jQuery1.7中,.live()方法已被弃用。这就是我想到的: $(document.body).on('click', '#list', function() { console.log($(this)); }); 这就相当于: $('#list').live('click', function(){ console.log($(this)); }); 它们都返回#listjQuery对象,这正是我想要的。 但是,问题是当我将jQuery对象作为第二个参数而不是
$(document.body).on('click', '#list', function() {
console.log($(this));
});
这就相当于:
$('#list').live('click', function(){
console.log($(this));
});
它们都返回#listjQuery对象,这正是我想要的。
但是,问题是当我将jQuery对象作为第二个参数而不是字符串(这种情况经常发生)传递时,例如:
控制台返回$(body)jQuery对象。这在那一点上是没有用的
有什么想法吗
编辑:这里的问题不是如何访问示例1和2中受影响的对象$(“#列表”),而是如何访问示例3中的对象。您可以在官方网站上找到一个非常清楚的答案: 此后,不再建议使用.live()方法 jQuery的版本提供了更好的方法,而这些方法没有它的特性 缺点。特别是,使用 .live():
- jQuery在调用
方法之前尝试检索选择器指定的元素,该方法可能是 处理大型文档非常耗时.live()
- 不支持链接方法。例如,
$(“a”).find(“.offsite,.external”).live(…)代码>是 无效,无法按预期工作
- 由于所有
事件都附加在.live()
元素上,因此事件花费的时间最长、速度最慢 处理它们之前的可能路径文档
- 召唤
在中,事件处理程序在停止事件处理程序时无效
附在文件下方;事件已传播到
文档
方法以令人惊讶的方式与其他事件方法交互,例如。,.live()
删除所有单击处理程序 通过调用$(文档)。取消绑定(“单击”)
附加.live()
将对象作为第二个参数传递到上的
是不正确的
从:
.on(事件[,选择器][,数据],处理程序(事件对象))
它需要一个选择器而不是jQuery对象,因此您需要使用:
$(document.body).on('click', '#list', function() {
console.log($(this));
});
可能重复:我想不太可能。我描述了关于访问受事件影响的对象的问题,而不是这两种方法之间的区别。控制台返回的正是预期的$(这)在这种情况下引用document.body的内容。但是我如何访问受影响的对象(例如,假设有同级对象)?那么我如何访问受影响的选择器(例如,如果有同级对象)?如中所示,如果选择器将匹配其他列表元素<代码>$(此)
将引用已单击的一个。我在第一篇文章中添加了一个编辑,希望这会突出问题。(“这里的问题不是如何访问示例1和2中受影响的对象$('#list'),而是如何访问示例3中的对象。”)我明白了。答案是一样的;你不能。第二个参数是选择器而不是对象。嗯,我明白了。它不否认干燥的概念吗?
$(document.body).on('click', '#list', function() {
console.log($(this));
});