WebKit与event.layerX和event.layerY有关

时间:2011-10-19 17:30:02

标签: jquery google-chrome webkit

我刚刚注意到我在最新的(金丝雀)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

9 个答案:

答案 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的实例没有帮助 - 该属性一般被引用,而不是名称。