1. Window.event
【Instruksi Analisis】 Lihat sepotong kode terlebih dahulu
Salinan kode adalah sebagai berikut:
fungsi et ()
{
alert (event); // yaitu: [objek]
}
Hasil dari kode di atas yang berjalan di IE adalah [objek], tetapi tidak dapat dijalankan di Firefox.
Karena peristiwa dapat digunakan secara langsung sebagai properti dari objek jendela di IE, tetapi di Firefox, model W3C digunakan, yang menyebarkan peristiwa melalui metode parameter yang lewat, yaitu, Anda perlu menyediakan antarmuka respons acara untuk fungsi Anda.
[Pemrosesan Kompatibilitas] Tambahkan penilaian acara dan dapatkan acara yang benar sesuai dengan browser:
Salinan kode adalah sebagai berikut:
fungsi et ()
{
evt = evt? evt: (window.event? window.event: null);
// kompatibel dengan IE dan Firefox
Peringatan (EVT);
}
2. Akuisisi nilai keyboard
[Catatan Analisis] Metode mendapatkan nilai keyboard dari IE dan Firefox berbeda. Dapat dipahami bahwa acara tersebut. Yang di bawah Firefox setara dengan acara tersebut. Kode Kode di bawah IE. Untuk perbedaan masing -masing, silakan merujuk ke "Tes Kompatibilitas untuk Kode Key, yang dan Charcode dalam Acara Keyboard"
【Pemrosesan yang kompatibel】
Salin kode
Salinan kode adalah sebagai berikut:
function mykeypress (evt) {
// kompatibel dengan IE dan Firefox untuk mendapatkan objek keyboardevent
EVT = (EVT)? evt: ((window.event)? window.event: "")
// kompatibel dengan IE dan Firefox untuk mendapatkan nilai kunci dari objek keyboardevent
var key = evt.keycode? evt.keycode: evt.WHich;
if (evt.ctrlkey && (key == 13 || key == 10)) {
// ctrl dan enter ditekan secara bersamaan
// Lakukan sesuatu;
}
}
3. Mendapatkan Sumber Acara
[Catatan Analisis] Saat menggunakan delegasi acara, kami dapat menentukan elemen mana acara tersebut berasal dari perolehan sumber acara. Namun, di IE, objek acara memiliki properti srcelement, tetapi tidak ada properti target; Di Firefox, objek genap memiliki properti target, tetapi tidak ada properti srcelement.
【Pemrosesan yang kompatibel】
Salinan kode adalah sebagai berikut:
ele = function (evt) {// menangkap objek yang akting peristiwa saat ini
evt = evt || window.event;
Kembali
(obj = event.srcelement? event.srcelement: event.target;);
}
4. Pemantauan acara
[Catatan Analisis] Dalam hal mendengarkan dan memproses peristiwa, IE menyediakan dua antarmuka: AttachEvent dan Detachevent, sementara Firefox menyediakan AddEventListener dan RemestEventListener.
[Pemrosesan Kompatibilitas] Pemrosesan kompatibilitas paling sederhana adalah merangkum kedua set antarmuka ini:
Salinan kode adalah sebagai berikut:
Function AddEvent (Elem, EventName, Handler) {
if (elem.attachevent) {
elem.attachevent ("on" + eventName, function () {
handler.call (elem)});
// Gunakan Callback Function Call () di sini, biarkan hal ini ke Elem
} lain jika (elem.addeventListener) {
elem.addeventlistener (eventName, handler, false);
}
}
Fungsi RemestEvent (Elem, EventName, Handler) {
if (elem.detachevent) {
elem.detachevent ("on" + eventName, function () {
handler.call (elem)});
// Gunakan Callback Function Call () di sini, biarkan hal ini ke Elem
} lain jika (elem.removeeventlistener) {
elem.removeeventlistener (eventName, handler, false);
}
}
Perlu dicatat bahwa di bawah Firefox, ini dalam fungsi penanganan acara poin ke elemen yang didengarkan itu sendiri, tetapi di IE, Anda dapat menggunakan panggilan fungsi callback untuk membiarkan konteks saat ini menunjuk ke elemen yang didengarkan.
5. Posisi tikus
[Catatan Analisis] Di bawah IE, objek genap memiliki atribut X dan Y, tetapi tidak ada atribut Pagex dan Pagey; Di bawah Firefox, objek genap memiliki atribut Pagex dan Pagey, tetapi tidak ada atribut X dan Y.
[Pemrosesan Kompatibilitas] Gunakan mx (mx = event.x? Event.x: event.pagex;) untuk mengganti event.x di bawah IE atau event.pagex di bawah firefox. Posisi absolut harus dipertimbangkan untuk titik -titik kompleks.
Salinan kode adalah sebagai berikut:
fungsi getabspoint (e) {
var x = e.offsetleft, y = e.offsettop;
while (e = E.OffsetParent) {
x += e.offsetleft;
y += e.offsettop;
}
peringatan ("x:" + x + "," + "y:" + y);
}