我刚刚注意到我在最新的(金丝雀)Chrome版本中收到了大量已弃用的警告。
event.layerX和event.layerY在WebKit中被破坏和弃用。它们将在不久的将来从发动机中移除。
看起来jQuery搞砸了。
我正在使用:jquery-1.6.1.min.js
。
是否有助于升级到最新的jQuery版本,或者它尚未修复,还是Chrome错误或其他问题。
PS
我无法向您显示代码,因为我认为这是一般错误,但我怀疑当我尝试访问jQuery对象或jQuery尝试访问layerX / layerY时会抛出警告(我很确定这是考虑错误的案例:P)。
jQuery可能会将这些属性复制到jQuery对象中。
因此...
发生了什么事?
修改
jQuery 1.7已经解决并解决了这个问题。
了解更多at their blog, here。
答案 0 :(得分:463)
发生了什么事?!
“jQuery可能会将这些属性复制到jQuery对象中。”你是完全正确的,所以听起来你已经知道了! :)
希望jQuery会更新他们的代码以停止接触,但同时WebKit应该知道比在事件上记录弃用警告更好(至少在我看来)。一个mousemove处理程序和你的控制台爆炸。 :)
这是最近的jQuery票证:http://bugs.jquery.com/ticket/10531
更新:如果您升级到jQuery 1.7,现在已修复。
请注意,如果升级jQuery无法解决问题,则可能与Jake在answer中说明的已使用的扩展/插件有关。
答案 1 :(得分:74)
http://jsperf.com/removing-event-props/2
临时修复是在通过jQuery进行任何事件绑定之前运行此代码:
(function(){
// remove layerX and layerY
var all = $.event.props,
len = all.length,
res = [];
while (len--) {
var el = all[len];
if (el != 'layerX' && el != 'layerY') res.push(el);
}
$.event.props = res;
}());
<强>更新强>
请参阅latest performance tests,了解删除活动道具的最快方法。
答案 2 :(得分:28)
最短的解决方案就是这个单线:
$.event.props = $.event.props.join('|').replace('layerX|layerY|', '').split('|');
答案 3 :(得分:21)
这些消息中的大量(我使用gmail时只有80000个消息)确实是Chrome中的一个错误。
您应该为issue on Chromium加注星标。
答案 4 :(得分:14)
它也可能是由Chrome扩展引起的,因此请检查jQuery更新是否无效。
答案 5 :(得分:5)
我在调用任何事件后都使用了这个:
$.event.props.splice($.event.props.indexOf("layerY"),1);
$.event.props.splice($.event.props.indexOf("layerX"),1);
这对我有用,因为我在我的代码上制作了这个补丁,所以没有任何警告信息。
答案 6 :(得分:5)
这是另一个单行修复,没有替换$ .event.props的原始实例(可能是也可能不是数组),以防万一: - )
$.each(["layerX","layerY"], function(i,v) { if((i=p.indexOf(v)) > -1) $.fn.splice.call($.event.props,i,1) })
答案 7 :(得分:4)
除了其他答案中列出的配置问题外,您可以通过自己的代码中的一个简单错误触发此错误:忘记jQuery ID选择器中的“#”。
我的代码看起来像
$('datenotset_2341').click(function(){
....etc....
});
(错过了“datenotset”前面的#)
除了(显然)无法正常工作外,还在Chrome中触发了此错误消息。
答案 8 :(得分:3)
我在自己的代码中遇到了这个问题。事实证明,我正在迭代事件对象上的所有属性,作为我正在使用的调试/检查工具的一部分。在这个特定的实例中,我使用jQuery的$ .extend来克隆对象以供稍后检查,但我相信各种工具包中的任何标准迭代技术都会触发警告。
我在这里提到它是因为我最初想到的只是在代码库中搜索layerX或layerY的实例没有帮助 - 该属性一般被引用,而不是名称。