Проблемы WebKit с event.layerX и event.layerY - PullRequest
507 голосов
/ 19 октября 2011

Я только что заметил, что я получаю тонны устаревших предупреждений в последней (канареечной) сборке Chrome.

event.layerX и event.layerY не работают и не рекомендуются в WebKit. Они будут сняты с двигателя в ближайшее время.

Похоже, что jQuery все испортил.

Я использую: jquery-1.6.1.min.js.

Поможет ли обновление до последней версии jQuery, или оно еще не исправлено, или это ошибка Chrome, или это что-то еще?

PS

Я не могу показать вам код, потому что я думаю, что это общая ошибка, но я подозреваю, что предупреждения появляются, когда я пытаюсь получить доступ к объекту jQuery или когда jQuery пытается получить доступ к layerX / layerY (ну, я уверен, что это случай с учетом ошибки: P).

jQuery, вероятно, копирует эти свойства в объект jQuery.

Итак ...

Что происходит?

EDIT

jQuery 1.7 вышел и исправляет эту проблему.

Подробнее в их блоге, здесь .

Ответы [ 9 ]

463 голосов
/ 20 октября 2011

Что происходит!?

"jQuery, вероятно, копирует эти свойства в объект jQuery." Вы абсолютно правы, так что, похоже, вы уже знаете! :)

Надеюсь, jQuery обновит свой код, чтобы перестать касаться этого, но в то же время WebKit должен был знать об этом лучше, чем записывать предупреждение об устаревании события (по крайней мере, на мой взгляд). Один обработчик перемещения мыши и ваша консоль взрывается. :)

Вот недавний билет jQuery: http://bugs.jquery.com/ticket/10531

ОБНОВЛЕНИЕ: теперь это исправлено, если вы обновляетесь до jQuery 1.7.

Обратите внимание, что если обновление jQuery не решит проблему, возможно, это связано с используемыми расширениями / плагинами, как сказал Джейк в своем ответе .

74 голосов
/ 21 октября 2011

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

UPDATE

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *.

28 голосов
/ 06 февраля 2012

Самое короткое решение для этого - это одна строка:

$.event.props = $.event.props.join('|').replace('layerX|layerY|', '').split('|');
21 голосов
/ 15 ноября 2011

Огромное количество этих сообщений (я только что получил 80000 из них при использовании gmail) действительно ошибка в Chrome.

Вы должны отметить проблему в Chromium .

14 голосов
/ 16 декабря 2011

Это также может быть вызвано расширениями Chrome, поэтому проверьте их, если обновление jQuery не работает.

5 голосов
/ 01 марта 2012

Вот еще одно исправление в одну строку, без замены исходного экземпляра $ .event.props (который может быть или не быть массивом), на всякий случай: -)

$.each(["layerX","layerY"], function(i,v) { if((i=p.indexOf(v)) > -1) $.fn.splice.call($.event.props,i,1) })
5 голосов
/ 24 января 2012

Я использовал это после вызова любого события:

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

Это сработало для меня, у меня нет предупреждений, так как я сделал этот патч для своего кода.

4 голосов
/ 10 января 2012

Помимо проблем с конфигурацией, перечисленных в других ответах, эта ошибка может быть вызвана простой ошибкой в ​​вашем собственном коде: забыв '#' из селектора jQuery ID.

У меня был код, похожий на

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

(пропуская # перед "datenotset")

Так же как (очевидно) не работающий, он вызвал это сообщение об ошибке в Chrome.

3 голосов
/ 09 апреля 2012

Я столкнулся с этой проблемой в своем собственном коде.Оказывается, я перебирал все свойства объекта события как часть инструмента отладки / проверки, который я использовал.В этом конкретном случае я использовал jQuery $ .extend для клонирования объекта для последующей проверки, но я считаю, что любой из стандартных методов итерации в различных наборах инструментов также вызвал бы предупреждение.

Я упомянул здесьпотому что моя первоначальная мысль о простом поиске в базе кода экземпляров layerX или layerY не помогла - на свойство ссылались в общем, а не по имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...