今天,我尝试回答问题here。所以,问的人如何使用jQuery 1.6由于某种原因(我之前从未使用过这个版本)。但是我知道 .live() 事件附件与文档中的数据选项,在1.7中已弃用。所以,当我在事件处理函数中使用$(this)
时,它返回选择器对象而不是数据对象。
所以我在这里创建了两个测试文件,一个在jQuery 1.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));
});
在first case我得到了以下输出:
[body, context: body, constructor: ....
在second case我得到了以下输出:
[span.some_class, context: ......
所以,我有疑问,为什么输出有所不同?有人可以给我解释一下这方面的历史知识吗? 因为当他们问我与jQuery 1.6.4相关的问题时,帮助别人对我有用。
编辑:所以我明白我在这里做错了是我用.on()搞砸了.live(),这在新版本的jQuery中并不相同。所以 .on()相当于1.6.4中的.delegate()和相当于的live() 绑定()。 抱歉我的问题。我没有仔细阅读文档。
答案 0 :(得分:1)
live
和on
之间的区别在于live
直接附加到元素,on
被委托给元素。引入了on()
来简化所有类型的jQuery绑定(也是bind()
和delegate()
)。
考虑以下html:
<div class="foo">
<div class="bar">
</div>
</div>
这个jQuery绑定:
//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",...);
并且,为什么您的控制台输出错误?
你没有使用实时正确。它必须是:$('span.some_class').live('click', function(e){... });
第二个参数只是解析其他数据。