Biasanya kita menulis objek event sebagai berikut:
fungsi getEvent(acara) {
kembalikan acara ||.jendela.acara // YAITU:jendela.acara
}
Jika tidak ada parameter, dapat juga ditulis sebagai (non-IE: objek peristiwa akan secara otomatis diteruskan ke fungsi pemrosesan peristiwa yang sesuai dan merupakan parameter pertama):
fungsi getEvent() {
kembalikan argumen[0] ||.jendela.acara // YAITU:jendela.acara
}
Cara penulisan ini tidak akan menimbulkan masalah saat dijalankan di browser selain Firefox (versi pengujian: 3.0.12, sama di bawah), tetapi mengapa Firefox merupakan pengecualian? Mari kita ambil situasi seperti ini:
<button id="btn" onclick="foo()">Tombol</button>
<skrip>
fungsi foo(){
var e = getEvent();
peringatan(e);}
</skrip>
Hasil yang berjalan tidak ditentukan di Firefox, mengapa?
Panggilan di Firefox sebenarnya seperti ini. Panggilan pertama yang dijalankan adalah:
fungsi onclick(acara) {
foo();
}
Kemudian panggilan dijalankan:
fungsi foo(){
var e = getEvent();
peringatan(e);
}
Anda akan menemukan bahwa foo() di onclick="foo()" di bawah Firefox tidak dapat secara otomatis meneruskan parameter objek acara, tetapi diteruskan ke fungsi onclick yang dihasilkan oleh sistem secara default. Dalam contoh ini, kita dapat meneruskan getEvent.caller .caller.arguments[ 0] Dapatkan objek acara.
Oleh karena itu, getEvent kita dapat dioptimalkan menjadi (lihat metode getEvent di event/event-debug.js di yui_2.7.0b):
fungsi getEvent(acara) {
var ev = acara ||.jendela.acara;
jika (!ev) {
var c = ini.getEvent.pemanggil;
sementara (c) {
ev = c.argumen[0];
if (ev && (Event == ev.constructor || MouseEvent == ev.constructor)) { /Catatan Yi Fei: kode sumber YUI BUG, ev.constructor juga bisa berupa MouseEvent, belum tentu Event
merusak;
}
c = c.penelepon;
}
}
kembalikan setiap;
}
Tentu saja, ada solusi yang sangat sederhana, yaitu meneruskan parameter secara manual ke onclick="foo()":
<button id="btn" onclick="foo(event)">Tombol</button>