jQuery 1.8.0 到 1.8.1 与 .on() 选择器不兼容
jQuery 1.8.0 to 1.8.1 incompatibility with .on() selectors
我们偶然发现了两个jQuery版本之间的不兼容性,这破坏了我们的一个应用程序。从 1.7 更新到最新的 2.1 版本时出现了问题,但缩小到 1.8.0 和 1.8.1 之间的差异。
我在这里(1.8.0,工作)和这里(1.8.1,坏了)建立了一个小提琴。
.HTML
<div class="outer">
<div class="eventcontext">
<a href="#targetNope" class="hasevent">Click me!</a>
</div>
</div>
.JS
$('.eventcontext').on('click', '.outer a.hasevent', function(e) {
e.preventDefault();
e.stopPropagation();
$('#targetYep').show();
});
在 1.8.0 中使用与所需元素匹配的选择器,选择器的一部分"高于"事件上下文没有任何问题,与本机querySelector
的工作方式相同,而在 1.8.1 中则没有。
这是一个有意的更改,还是我们可以期望在某个时候"修复"它?我想知道这是否可能是一个错误,因为它发生在补丁版本更新中,破坏了东西(至少在我们的例子中),但在最新版本中仍然相同。
来自 jQuery 1.8.1 更改日志:
Events: #12383: jQuery.on() selector should only apply to descendants of the element
因此,当您从选择器中删除.outer
时,它可以工作。
也有效,因为选择器是处理点击的元素的后代:
$('.outer').on('click', '.eventcontext a.hasevent', function(e) { /**/ });
$('.outer').on('click', 'a.hasevent', function(e) { /**/ });
猜测更改原因:旧版本必须搜索整个文档才能找到与选择器匹配的元素,这很慢。对于事件委派,在处理事件的元素之外搜索是没有意义的。
相关文章:
- JavaScriptDOM正常工作时JQuery选择器不工作
- Jquery UI日期选择器不关注输入
- 取消光谱颜色选择器不工作
- jQuery选择器不识别任何动态创建的HTML输入函数
- 选择器不全选
- 属性选择器不起作用(语法错误、无法识别的表达式)
- j查询选择器不选择对象
- asp.net jquery 日期选择器不起作用
- ajax调用后$('')选择器不工作
- 日期选择器不't使用'innerHTML'
- jQuery UI日期选择器不工作
- 在mvc上使用日期选择器不起作用
- JQuery Mobile中的日期选择器不工作
- jquery选择器-不选择内部元素
- 单击元素后Jquery选择器不工作
- Jqueryui日期选择器不显示日历
- jQuery日期选择器-不弹出
- JavaScript id 选择器不起作用?不知道出了什么问题
- 在下拉列表中更改选择器不起作用
- jQuery 1.8.0 到 1.8.1 与 .on() 选择器不兼容