WebKit事件问题。layerX和event.layerY

我刚刚注意到,在Chrome的最新版本(金丝雀版)中,我得到了大量的弃用警告。

事件。layerX和事件。layerY在WebKit中被破坏和弃用。它们将在不久的将来从发动机中移除。

看起来jQuery把事情搞砸了。

我正在使用:jquery-1.6.1.min.js

升级到最新的jQuery版本是否会有帮助,或者它还没有修复,或者它是Chrome的bug或其他东西。

PS

我不能向您展示代码,因为我认为这是一个普遍的错误,但我怀疑警告会抛出当我试图访问一个jQuery对象或当jQuery试图访问layerX / layerY(好吧,我很确定这是考虑到错误:P的情况)。

jQuery可能会将这些属性复制到jQuery对象中。

所以…

这是怎么呢

编辑

jQuery 1.7已经发布并修复了这个问题。

阅读更多在他们的博客,这里

96857 次浏览

这是怎么回事!?

jQuery可能会将这些属性复制到jQuery对象中。你完全正确,所以听起来你已经知道了!:)

希望jQuery会更新他们的代码来停止触及它,但同时WebKit应该知道在事件上记录deprecation警告(至少在我看来)。一个鼠标移动处理程序和你的控制台爆炸。:)

这是最近的jQuery票证:http://bugs.jquery.com/ticket/10531

更新:如果您升级到jQuery 1.7,这个问题现在是固定的。

请注意,如果升级jQuery并不能解决你的问题,这可能与杰克在他的回答中所说的使用扩展/插件有关。

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;
}());

更新

查看最新性能测试找出删除事件道具的最快方法。

大量的这些消息(我刚在使用gmail时得到了80000个)确实是Chrome的一个bug。

你应该用铬问题作为星号。

它也可能是由Chrome扩展引起的,所以如果jQuery更新不起作用,请检查它们。

与其他答案中列出的配置问题一样,这个错误可能是由您自己代码中的一个简单错误触发的:忘记了jQuery ID选择器from中的“#”。

我的代码是这样的

$('datenotset_2341').click(function(){
....etc....
});

(漏掉了“datenotset”前面的#)

以及(显然)无法工作,它在Chrome中触发了这条错误消息。

我在调用任何事件后都使用这个:

$.event.props.splice($.event.props.indexOf("layerY"),1);
$.event.props.splice($.event.props.indexOf("layerX"),1);

这为我工作,我没有警告消息,因为我在我的代码上做了这个补丁。

最简单的解决方法是这样一行代码:

$.event.props = $.event.props.join('|').replace('layerX|layerY|', '').split('|');

下面是另一个一行修复,没有替换$.event的原始实例。Props(可能是也可能不是数组),以防万一:-)

$.each(["layerX","layerY"], function(i,v) { if((i=p.indexOf(v)) > -1) $.fn.splice.call($.event.props,i,1) })

我在自己的代码中遇到了这个问题。事实证明,我是在迭代一个事件对象上的所有属性,作为我正在使用的调试/检查工具的一部分。在这个特殊的实例中,我使用了jQuery的$。扩展来克隆对象以供以后检查,但我相信各种工具包中的任何标准迭代技术也会触发该警告。

我在这里提到它是因为我最初的想法是简单地在代码库中搜索layerX或layerY的实例并没有帮助-属性是一般引用的,而不是通过名称。