firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码_javascript技巧
在ie中,事件对象是作为一个全局变量来保存和维护的。 所有的浏览器事件,不管是用户触发的,还是其他事件, 都会更新window.event 对象。 所以在代码中,只要轻松调用 window.event 就可以轻松获取 事件对象, 再 event.srcElement 就可以取得触发事件的元素进行进一步处理在ff中, 事件对象却不是全局对象,一般情况下,是现场发生,现场使用,ff把事件对象自动传递给对应的事件处理函数。 在代码中,函数的第一个参数就是ff下的事件对象了。
以上是我个人对两个浏览器下的事件处理方法的粗浅理解,可能说得不是很明白,我写些代码来
详细说明一下
<script> <BR>window.onload=function(){ <BR>document.getElementById("btn1").onclick=foo1 <BR>document.getElementById("btn2").onclick=foo2 <BR>document.getElementById("btn3").onclick=foo3 <BR>} <BR>function foo1(){ <BR>//ie中, window.event使全局对象 <BR>alert(window.event) // ie下,显示 "[object]" , ff下显示 "undefined" <BR>//ff中, 第一个参数自动从为 事件对象 <BR>alert(arguments[0]) // ie下,显示 "undefined", ff下显示 "[object]" <BR>} <BR>function foo2(e){ <BR>alert(window.event) // ie下,显示 "[object]" , ff下显示 "undefined" <BR>//注意,我从来没有给 foo2传过参数哦。 现在 ff自动传参数给 foo2, 传的参数e 就是事件对象了 <BR>alert(e) // ie下,显示 "undefined", ff下显示 "[object]" <BR>} <BR>function foo3(){ //同时兼容ie和ff的写法,取事件对象 <BR>alert(arguments[0] || window.event) // ie 和 ff下,都显示 "[object]" <BR>var evt=arguments[0] || window.event <BR>var element=evt.srcElement || evt.target //在 ie和ff下 取得 btn3对象 <BR>alert(element.id) // btn3 <BR>} <BR></script>
看到这里,我们似乎对 ie和ff的事件处理方式都已经理解了,并找到了解决的办法。
但是。。。。事情还没有结束。
看代码
<script> <BR>function foo(){ <BR>alert(arguments[0] || window.event) <BR>} <BR></script>
很不幸,我们 foo给我们的结果是 undefined, 而不是期望的 object
原因在于 事件绑定的方式
onclick="foo()" 就是直接执行了, foo() 函数,没有任何参数的,
这种情况下 firefox没有机会传递任何参数给foo
而 btn.onclick=foo 这种情况, 因为不是直接执行函数,firefox才有机会传参数给foo
解决方法:
方法一:比较笨的方法,既然 firefox没有机会传参数,那么自己勤快点,自己传
<script> <BR>function foo(){ <BR>alert(arguments[0] || window.event) <BR>var evt=arguments[0] || window.event <BR>var element=evt.srcElement || evt.target <BR>alert(element.id) <BR>} <BR></script>
方法二: 自动查找
<script> <BR>function foo4(){ <BR>var evt=getEvent() <BR>var element=evt.srcElement || evt.target <BR>alert(element.id) <BR>} <BR>function getEvent(){ //同时兼容ie和ff的写法 <BR>if(document.all) return window.event; <BR>func=getEvent.caller; <BR>while(func!=null){ <BR>var arg0=func.arguments[0]; <BR>if(arg0){ <BR>if((arg0.constructor==Event || arg0.constructor ==MouseEvent) <BR>|| (typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation)){ <BR>return arg0; <BR>} <BR>} <BR>func=func.caller; <BR>} <BR>return null; <BR>} <BR></script>
方法二由 lostinet原创,我在其基础上有所改进, 原函数如下
function SearchEvent()
{
//IE
if(document.all)
return window.event;
func=SearchEvent.caller;
while(func!=null)
{
var arg0=func.arguments[0];
if(arg0)
{
if(arg0.constructor==Event)
return arg0;
}
func=func.caller;
}
return null;
}
简单总结:
以上两个解决方法中,都正确处理 ff和ie下 的事件处理 (不管是onclick="foo()",方式还是 onclick=foo方式)
但是个人建议用 getEvent() 方法来统一处理 事件问题。
先写到这里,大家继续。。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Untuk mengalih keluar FirefoxSnap dalam Ubuntu Linux, anda boleh mengikuti langkah berikut: Buka terminal dan log masuk ke sistem Ubuntu anda sebagai pentadbir. Jalankan arahan berikut untuk menyahpasang FirefoxSnap: sudosnapremovefirefox Anda akan digesa untuk kata laluan pentadbir anda. Masukkan kata laluan anda dan tekan Enter untuk mengesahkan. Tunggu pelaksanaan arahan selesai. Setelah selesai, FirefoxSnap akan dialih keluar sepenuhnya. Ambil perhatian bahawa ini akan mengalih keluar versi Firefox yang dipasang melalui pengurus pakej Snap. Jika anda memasang versi Firefox yang lain melalui cara lain (seperti pengurus pakej APT), anda tidak akan terjejas. Pergi melalui langkah-langkah di atas

Bukan rahsia lagi bahawa Internet Explorer telah lama tidak disukai, tetapi dengan ketibaan Windows 11, realiti muncul. Daripada kadangkala menggantikan IE pada masa hadapan, Edge kini menjadi penyemak imbas lalai dalam sistem pengendalian terkini Microsoft. Buat masa ini, anda masih boleh mendayakan Internet Explorer dalam Windows 11. Walau bagaimanapun, IE11 (versi terkini) sudah mempunyai tarikh persaraan rasmi, iaitu 15 Jun 2022, dan jam semakin berdetik. Dengan mengambil kira perkara ini, anda mungkin perasan bahawa Internet Explorer kadangkala membuka Edge, dan anda mungkin tidak menyukainya. Jadi mengapa ini berlaku? wujud

Semakin ramai pengguna mula menaik taraf sistem win11 Memandangkan setiap pengguna mempunyai tabiat penggunaan yang berbeza, ramai pengguna masih menggunakan pelayar ie11 Jadi apa yang perlu saya lakukan jika sistem win11 tidak boleh menggunakan pelayar ie. Adakah windows11 masih menyokong ie11? Mari kita lihat penyelesaiannya. Penyelesaian kepada masalah yang win11 tidak boleh menggunakan pelayar ie11 1. Pertama, klik kanan menu mula dan pilih "Command Prompt (Administrator)" untuk membukanya. 2. Selepas dibuka, terus masukkan "Netshwinsockreset" dan tekan Enter untuk mengesahkan. 3. Selepas pengesahan, masukkan "netshadvfirewallreset&rdqu

Pengenalan ringkas kepada GUI pengaturcaraan GUI python (Antara Muka Pengguna Grafik, antara muka pengguna grafik) ialah cara yang membolehkan pengguna berinteraksi dengan komputer secara grafik. Pengaturcaraan GUI merujuk kepada penggunaan bahasa pengaturcaraan untuk mencipta antara muka pengguna grafik. Python ialah bahasa pengaturcaraan popular yang menyediakan perpustakaan GUI yang kaya, menjadikan pengaturcaraan GUI Python sangat mudah. Pengenalan kepada perpustakaan GUI Python Terdapat banyak perpustakaan GUI dalam Python, yang paling biasa digunakan ialah: Tkinter: Tkinter ialah perpustakaan GUI yang disertakan dengan perpustakaan standard Python Ia mudah dan mudah digunakan, tetapi mempunyai fungsi yang terhad. PyQt: PyQt ialah perpustakaan GUI merentas platform dengan fungsi yang berkuasa.

Pengenalan CircularQueue ialah penambahbaikan pada baris gilir linear, yang diperkenalkan untuk menyelesaikan masalah sisa ingatan dalam baris gilir linear. Baris gilir pekeliling menggunakan prinsip FIFO untuk memasukkan dan memadam elemen daripadanya. Dalam tutorial ini, kami akan membincangkan pengendalian baris gilir bulat dan cara mengurusnya. Apakah giliran pekeliling? Baris pekeliling ialah satu lagi jenis baris gilir dalam struktur data di mana hujung hadapan dan hujung belakang disambungkan antara satu sama lain. Ia juga dikenali sebagai penampan bulat. Ia beroperasi sama seperti baris gilir linear, jadi mengapa kita perlu memperkenalkan baris gilir baharu dalam struktur data? Apabila menggunakan baris gilir linear, apabila baris gilir mencapai had maksimumnya, mungkin terdapat sedikit ruang memori sebelum penuding ekor. Ini mengakibatkan kehilangan ingatan, dan algoritma yang baik seharusnya dapat menggunakan sumber sepenuhnya. Untuk menyelesaikan pembaziran ingatan

Mozilla Firefox boleh dinyahpasang; Firefox ialah penyemak imbas pihak ketiga dan boleh dinyahpasang jika ia tidak diperlukan. Kaedah nyahpasang: 1. Dalam menu Mula, klik "Sistem Windwos" - "Panel Kawalan"; 2. Dalam antara muka "Panel Kawalan", klik "Program dan Ciri" 3. Dalam antara muka baharu, cari dan klik dua kali Ikon Pelayar Firefox; 4. Dalam tetingkap pop timbul, klik "Seterusnya" 5. Klik "Nyahpasang".

Baru-baru ini, ramai pengguna win10 mendapati bahawa pelayar IE mereka sentiasa melompat ke pelayar tepi secara automatik apabila menggunakan pelayar komputer Jadi bagaimana untuk mematikan lompat ke tepi automatik apabila membuka IE dalam win10? Biarkan tapak ini dengan teliti memperkenalkan kepada pengguna cara melompat ke tepi dan menutup secara automatik apabila membuka IE dalam win10. 1. Kami log masuk ke pelayar tepi, klik... di penjuru kanan sebelah atas, dan cari pilihan tetapan lungsur turun. 2. Selepas kami memasukkan tetapan, klik Penyemak Imbas Lalai di lajur kiri. 3. Akhir sekali, dalam keserasian, kami menandakan kotak untuk tidak membenarkan tapak web dimuat semula dalam mod IE dan mulakan semula pelayar IE.

15 Jun 2022 ialah hari apabila Microsoft menamatkan sokongan untuk Internet Explorer 11 (IE11) dan menutup bab penyemak imbas warisannya. Syarikat itu telah mengingatkan pengguna tentang tarikh akhir hayat ini untuk beberapa waktu dan menyeru mereka untuk merancang perpindahan ke Microsoft Edge. Microsoft menggabungkan IE11 dengan Windows 8.1 sebagai pelayar web lalai moden untuk Windows. Walaupun ia tidak pernah mencapai ketinggian (semasa) Chrome, ia merupakan penyemak imbas desktop kedua paling banyak digunakan pada tahun 2014, di belakang IE8. Sudah tentu, dengan 20
