Я только заметил, что получаю тонну устаревших предупреждений в последней (канареечной) сборке 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 вышел и исправляет эту проблему.
Подробнее в своем блоге, здесь.
Что происходит!?
"jQuery, вероятно, копирует эти свойства в объект jQuery." Ты точно прав, так что, похоже, ты уже знаешь!:)
Надеюсь, что jQuery обновит свой код, чтобы не дотрагиваться до этого, но в то же время WebKit должен был знать лучше, чем регистрировать предупреждение о задержке на мероприятии (по крайней мере, на мой взгляд). Один mousemove обработчик и ваша консоль взрывается.:)
Вот недавний билет jQuery: http://bugs.jquery.com/ticket/10531
UPDATE: теперь это исправлено, если вы обновляетесь до jQuery 1.7.
Обратите внимание, что если обновление jQuery не поможет вам решить проблему, возможно, что-то связано с используемыми расширениями/плагинами, как заявил Джейк в своем 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;
}());
UPDATE
Посмотрите последние тесты производительности, чтобы узнать, какой самый быстрый способ - удалить реквизиты событий.
Самое короткое решение этого - это однострочный:
$.event.props = $.event.props.join('|').replace('layerX|layerY|', '').split('|');
Огромное количество этих сообщений (у меня только 80000 из них при использовании gmail) действительно является ошибкой в Chrome.
Вам следует нажать кнопку на Chromium.
Это также может быть вызвано расширениями 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.
У меня был код, похожий на
$('datenotset_2341').click(function(){
....etc....
});
(пропускает # перед "datenotset" )
Как и (очевидно) не работает, он вызвал это сообщение об ошибке в Chrome.
Я столкнулся с этой проблемой в своем собственном коде. Оказывается, я выполнял итерацию по всем свойствам объекта события как часть инструмента отладки/проверки, который я использовал. В этом конкретном случае я использовал jQuery $.extend для клонирования объекта для последующей проверки, но я считаю, что любой из стандартных методов итерации в различных инструментариях также вызвал бы предупреждение.
Я упоминаю это здесь, потому что моя первоначальная мысль о простом поиске базы кода для экземпляров layerX или layerY не помогла - свойство ссылалось в общем случае не по имени.