我刚刚注意到我在最新的(金丝雀)Chrome 版本中收到了大量已弃用的警告。
event.layerX 和 event.layerY 在 WebKit 中被破坏和弃用。它们将在不久的将来从引擎中移除。
看起来 jQuery 搞砸了。
我正在使用:jquery-1.6.1.min.js
。
升级到最新的 jQuery 版本是否有帮助,或者它还没有修复,或者它是 Chrome 错误还是其他什么。
附言
我无法向您展示代码,因为我认为这是一个一般性错误,但我怀疑当我尝试访问 jQuery 对象或 jQuery 尝试访问 layerX / layerY 时会引发警告(好吧,我很确定这是考虑到的情况错误:P)。
jQuery 可能会将这些属性复制到 jQuery 对象中。
所以...
这是怎么回事?
编辑
jQuery 1.7 已经发布并修复了这个问题。
阅读更多at their blog, here。
@
来抑制错误。
这是怎么回事!?
“jQuery 可能会将这些属性复制到 jQuery 对象中。”你是完全正确的,所以听起来你已经知道了! :)
希望 jQuery 将更新他们的代码以停止触及它,但同时 WebKit 应该知道比在事件上记录弃用警告更好(至少在我看来)。一个 mousemove 处理程序和您的控制台爆炸。 :)
这是最近的 jQuery 票证:http://bugs.jquery.com/ticket/10531
更新:如果您升级到 jQuery 1.7,现在已修复此问题。
请注意,如果升级 jQuery 不能为您解决问题,则可能与 Jake 在他的 answer 中所说的使用的扩展/插件有关。
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,了解删除事件道具的最快方法。
最短的解决方案是这个单行:
$.event.props = $.event.props.join('|').replace('layerX|layerY|', '').split('|');
它也可能是由 Chrome 扩展引起的,所以如果 jQuery 更新不起作用,请检查它们。
这是另一行修复,没有替换 $.event.props 的原始实例(可能是也可能不是数组),以防万一:-)
$.each(["layerX","layerY"], function(i,v) { if((i=p.indexOf(v)) > -1) $.fn.splice.call($.event.props,i,1) })
我在调用任何事件后使用了它:
$.event.props.splice($.event.props.indexOf("layerY"),1);
$.event.props.splice($.event.props.indexOf("layerX"),1);
这对我有用,因为我已经在我的代码上制作了这个补丁,所以我没有任何警告消息。
除了其他答案中列出的配置问题外,此错误可能由您自己的代码中的一个简单错误触发:忘记 jQuery ID 选择器中的“#”。
我的代码看起来像
$('datenotset_2341').click(function(){
....etc....
});
(错过了“datenotset”前面的#)
除了(显然)无法正常工作外,它还在 Chrome 中触发了此错误消息。
我在自己的代码中遇到了这个问题。事实证明,作为我正在使用的调试/检查工具的一部分,我正在迭代事件对象上的所有属性。在这个特定的例子中,我使用 jQuery 的 $.extend 来克隆对象以供以后检查,但我相信各种工具包中的任何标准迭代技术也会触发警告。
我在这里提到它是因为我最初的想法是简单地在代码库中搜索 layerX 或 layerY 的实例并没有帮助 - 该属性是通用引用的,而不是按名称引用的。