Javascript jQuery$(这是.live()和.on()事件处理程序之间的引用差异
今天,我试着回答这个问题。所以,被问到问题的人出于某种原因使用jQuery1.6(我以前从未自己使用过这个版本)。然而,我从文档中了解到带有数据选项的事件附件,该选项在1.7中被弃用。所以,当我在事件处理函数中使用Javascript jQuery$(这是.live()和.on()事件处理程序之间的引用差异,javascript,jquery,Javascript,Jquery,今天,我试着回答这个问题。所以,被问到问题的人出于某种原因使用jQuery1.6(我以前从未自己使用过这个版本)。然而,我从文档中了解到带有数据选项的事件附件,该选项在1.7中被弃用。所以,当我在事件处理函数中使用$(this)时,它返回的是选择器对象而不是数据对象 所以我在这里创建了两个测试文件,一个在jQuery1.6.4中,另一个在1.10.1中,如下所示 Jquery 1.6.4 $('body').live('click', 'span.some_class', function(e)
$(this)
时,它返回的是选择器对象而不是数据对象
所以我在这里创建了两个测试文件,一个在jQuery1.6.4中,另一个在1.10.1中,如下所示
Jquery 1.6.4
$('body').live('click', 'span.some_class', function(e){
console.log($(this))
});
Jquery 1.10.1
$('body').on('click', 'span.some_class', function(e){
console.log($(this));
});
在中,我得到了以下输出:
[body, context: body, constructor: ....
在中,我得到了以下输出:
[span.some_class, context: ......
所以,我有一个问题,为什么输出是不同的?谁能给我解释一下,谁对这方面有历史知识?。
因为当别人问我与jQuery 1.6.4相关的问题时,帮助他们对我来说真的很有用
编辑:所以我明白我在这里犯的错误是我把.live()和.on()搞混了,这在较新版本的jQuery中是不等价的。所以
.on()相当于1.6.4中的.delegate(),live()相当于
绑定()对不起我的问题。我没有仔细阅读文档
live
和on
之间的区别在于live
直接附加到元素,而on
则委托给元素<引入了code>on()来简化所有类型的jQuery绑定(还有bind()
和delegate()
)
考虑以下html:
<div class="foo">
<div class="bar">
</div>
</div>
为什么您的控制台输出错误?
你没有正确使用live。它必须是:$('span.some_class').live('click',function(e){…})代码>
第二个参数只是解析附加数据 您的live语法不正确,至少不像您预期的那样be@A.Wolff你能指出它吗?我真的很想了解这里的错误。应该更像$('span.some_class')。live('click',function(e){…
。您的版本将把事件绑定到body
,而不是span。live的某些\u class
@Phoenix第二个(可选)参数是数据对象,而不是字符串选择器。.live(事件、数据、处理程序)(eventObject))
@Phoenix-正如AWolff指出的,第二个可选参数不是选择器。Docs:
//live() checks the whole DOM on every change, could get very slow
$(".bar").live("click",...);
//on() only has to check a part of the DOM on changes
$(".foo").on("click",".bar",...);