it-swarm-id.com

Masalah WebKit dengan event.layerX dan event.layerY

Saya baru saja memperhatikan bahwa saya mendapatkan banyak sekali peringatan yang sudah ketinggalan zaman dalam pembuatan Chrome terbaru.

event.layerX dan event.layerY rusak dan tidak digunakan lagi di WebKit. Mereka akan dikeluarkan dari mesin dalam waktu dekat.

Sepertinya jQuery mengacaukan semuanya.

Saya menggunakan: jquery-1.6.1.min.js.

Apakah akan membantu untuk meningkatkan ke versi jQuery terbaru atau belum diperbaiki atau apakah itu bug Chrome atau itu sesuatu yang lain.

PS

Saya tidak dapat menunjukkan kode kepada Anda karena saya pikir ini adalah kesalahan umum, tetapi saya curiga peringatan tersebut dilemparkan ketika saya mencoba mengakses objek jQuery atau ketika jQuery mencoba mengakses layerX/layerY (well, saya cukup yakin itu masalahnya mengingat kesalahan: P).

jQuery mungkin menyalin properti-properti itu ke objek jQuery.

Begitu...

Apa yang sedang terjadi?

SUNTING

jQuery 1.7 keluar dan memperbaiki masalah ini.

Baca lebih lanjut di blog mereka, di sini .

507
PeeHaa

Apa yang sedang terjadi!?

"jQuery mungkin menyalin properti-properti itu ke objek jQuery." Kamu benar sekali, jadi sepertinya kamu sudah tahu! :)

Semoga jQuery akan memperbarui kode mereka untuk berhenti menyentuh itu, tetapi pada saat yang sama WebKit seharusnya tahu lebih baik daripada mencatat peringatan penghentian pada suatu acara (setidaknya menurut saya). Satu pengendali mouse dan konsol Anda meledak. :)

Ini tiket jQuery terbaru: http://bugs.jquery.com/ticket/10531

UPDATE: Ini diperbaiki sekarang jika Anda meningkatkan ke jQuery 1.7.

Harap perhatikan bahwa jika memutakhirkan jQuery tidak memperbaiki masalah untuk Anda, mungkin ada hubungannya dengan ekstensi/plugin yang digunakan seperti yang dinyatakan Jake dalam jawabannya .

463
Adam A

http://jsperf.com/removing-event-props/2

Perbaikan sementara adalah menjalankan kode ini sebelum Anda melakukan acara apa pun yang mengikat melalui 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;
}());

PERBARUI

Lihat tes kinerja terbar untuk mencari tahu apa cara tercepat untuk menghapus alat peraga acara.

74
David Murdoch

Solusi terpendek untuk ini adalah ini satu kalimat:

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

Banyaknya pesan ini (Saya baru saja mendapatkan 80000 dari mereka saat menggunakan gmail) memang bug di Chrome.

Anda harus memberi bintang pada masalah pada Chromium .

21
törzsmókus

Ini juga bisa disebabkan oleh ekstensi Chrome, jadi periksa apakah pembaruan jQuery tidak berfungsi.

14
Jake

Saya telah menggunakan ini setelah memanggil acara apa pun:

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

Itu bekerja untuk saya, saya tidak punya pesan peringatan karena saya sudah membuat patch ini pada kode saya.

5
jca258

Berikut ini adalah satu perbaikan lagi, tanpa mengganti instance asli dari $ .event.props (yang mungkin atau mungkin bukan array), untuk berjaga-jaga :-)

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

Selain masalah konfigurasi yang tercantum dalam jawaban lain, kesalahan ini dapat dipicu oleh kesalahan sederhana dalam kode Anda sendiri: melupakan tanda '#' dari pemilih ID jQuery.

Saya memiliki kode yang terlihat seperti

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

(kehilangan # di depan "datenotset")

Serta (jelas) gagal berfungsi, itu memicu pesan kesalahan ini di Chrome.

4
xgretsch

Saya mengalami masalah ini dalam kode saya sendiri. Ternyata saya mengulangi semua properti pada objek acara sebagai bagian dari alat debugging/inspeksi yang saya gunakan. Dalam contoh khusus ini saya menggunakan $ .Exp jQuery untuk mengkloning objek untuk pemeriksaan nanti, tapi saya percaya salah satu teknik iterasi standar dalam berbagai toolkit akan memicu peringatan juga.

Saya menyebutkannya di sini karena pemikiran awal saya hanya mencari basis kode untuk contoh layerX atau layerY tidak membantu - properti sedang direferensikan secara umum, bukan dengan nama.

3
Kris Giesing