Javascript jQuery$(这是.live()和.on()事件处理程序之间的引用差异

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)

今天,我试着回答这个问题。所以,被问到问题的人出于某种原因使用jQuery1.6(我以前从未自己使用过这个版本)。然而,我从文档中了解到带有数据选项的事件附件,该选项在1.7中被弃用。所以,当我在事件处理函数中使用
$(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",...);