cari
Rumahhujung hadapan webtutorial jsBercakap tentang pemahaman saya tentang kemahiran JavaScript DOM events_javascript

Apakah itu acara?

Acara adalah jantung aplikasi JavaScript yang mendebarkan dan gam yang menyatukan segala-galanya. Peristiwa berlaku apabila kami melakukan jenis interaksi tertentu dengan halaman web dalam penyemak imbas. Peristiwa mungkin pengguna mengklik pada sesuatu, menggerakkan tetikus ke atas elemen tertentu atau menekan kekunci tertentu pada papan kekunci. Peristiwa juga mungkin perkara yang berlaku dalam penyemak imbas web, seperti memuatkan halaman web, atau pengguna menatal atau mengubah saiz tetingkap.

Dengan menggunakan JavaScript, anda boleh mendengar peristiwa tertentu berlaku dan menentukan bahawa peristiwa tertentu berlaku sebagai tindak balas kepada peristiwa tersebut.

DOM dan acara ialah salah satu komponen teras JavaScript. Ia memberi halaman ruang tanpa had untuk imaginasi anda tidak boleh meninggalkannya, jika tidak, js tidak akan dapat bergerak ke hadapan. Dalam proses pembangunan harian kami, kemunculan jQuery menjadikan kami berguna Walau bagaimanapun, anda mesti tahu bahawa sebab mengapa jQuery memudahkan perkara adalah disebabkan oleh API berkuasa yang disediakan oleh JavaScript itu sendiri.

Pertama sekali, artikel ini tidak akan membincangkan butiran yang membosankan, tetapi mengambil kira perasaan rohani pembaca dan dengan sikap positif, contoh akan disenaraikan di sini.

Tajuknya Memahami Acara DOM, jadi mari kita ambil acara klik mudah sebagai contoh saya harap semua orang dapat memahaminya selepas melihat contoh ini.
Pada mulanya kami melaksanakan klik pada halaman, semudah operasi berikut.

Mula-mula tentukan blok seperti

microuniverse
, dan kemudian laksanakan id sebagai weiyuzhou di dalam Klik acara, seperti yang ditunjukkan dalam kod berikut:
var wyz = document.getElementById('weiyuzhou');
wyz.onclick = function () {
  confirm(arguments.length)
} 

确保上面这些步骤都没问题的话,我们才可以继续的往下走,然后我们在IE浏览器(低版本)看到弹出0,确切的说,IE8以下(包含IE8)的弹出0,反之弹出1。接着我在firefox浏览器看到弹出1。也就是说在IE8以下版本事件的触发不存在于函数的作用域内部,是不是说IE8以下的事件触发发生在全局作用域中,此处留个悬念,但是,可以肯定的是IE8以下事件的方法并没有这个Event参数,也就是说arguments的长度为0,如下视图5-02所示:

5-02

于是,我们看firefox浏览器窗口弹出1,说明事件存在于函数内部,再次证明方法的内部数组arguments长度为1,并且是可枚举的变量,也可以说可写,如下视图5-03所示。

5-03

如果,你还是不明白其中的原理,你不防去看一下《web前端开发修炼之道》书上第169页,然后再回过头来看此处文章摘要,可能会让你更加深层次的了解书中的内容。

接下来,我们该怎么办呢,我们肯定不能让IE和firefox返回的事件输出不相同,那么如何让IE和firefox下弹出的内容都一样。

衔接上一段内容,下面给点击函数的内部设置一个参数,参数名为e,然后在IE和firefox浏览器下面同时触发点击事件,我们看到firefox下面显示e为鼠标事件[object MouseEvent],IE8下报错,弹出错误信息未定义undefined。此时你要问我错在哪里,咱们回到刚刚的那句话‘此处留个悬念'进行分析,IE8以下的浏览器的事件是不是发生在全局作用域中,从视图5-02所示看到有一个global全局对象,我们可以对global展开搜索,global的继承的方法有一个event事件,找到了IE8的专有事件方法window继承event,于是我们对这个参数e设置为window.event进行一个调试,目前我们在IE8下面看到返回了一个事件[object event],如图5-04所示。

5-04

 

想必你一定发现了IE8和firefox浏览器下对话框的事件返回值各不不同,IE8的对话框[object MouseEvent],firefox的对话框[object event],那我们怎么让IE8和firefox下的返回值都相同呢?

看到这里,你的心里是不是有点小沮丧,挖坑挖了这么久了,怎么还没有看到水流出来,别急,正题才刚刚开始,咱们不闲聊,继续围绕正题展开分析,通过刚刚的返回值,我们继续使用断点的方法寻找能够实现IE和firefox的返回值的共同点。

经由以上分析,我们查找发现firefox下的event有我们需要的方法名可以被调用,当然,我们查找发现IE8下面的srcElement也有我们所需的方法名可以被调用,于是乎,呵呵!看到这里你的内心是不是有点小激动,一步步排除,最后发现也没有什么难的。回到正题,现在我们声明一个变量var e_child = e.srcElement || e.target; 然后我们在IE8和firefox浏览器上看到对话框信息都为[object HTMLDivElement],如图5-05所示。

5-05

 

现在我们解决了不同浏览器的返回值不同的问题,也就是说解决了兼容的问题,这只是冰上一角。

下面我们要解决实现窗口的容器触发事件,主要是基于上面的结构进行的一次分析。

当你有了上面基础的话,下面的内容相对于上面而言比较简单一点。

还是以上一个页面的块为例,现在我继续往块

微宇宙
Tambahkan sub-bekas, sub-bekas ini ialah elemen sebaris koringz, namakan id coz, dan kemudian tambahkan kod acara klik pada elemen ini dengan fungsi yang sama seperti di atas, untuk membezakan Buka perbezaan antara kandungan teks.

Apabila saya mengklik pada kandungan bekas di bawah IE8 dan Firefox masing-masing, situasi pelik berlaku Apabila saya mengklik pada tetingkap pelayar Firefox, kotak dialog 'Micro Universe' muncul apabila saya mengklik pada teks bahasa Cina. kandungan. Apabila saya mengklik pada koringz sekali lagi, saya mendapati bahawa kotak dialog sekunder muncul, dan kandungan pop timbul semuanya 'koringz' Itu kerana apabila saya mengklik pada sub-bekas, gelagat klik pada lapisan sebelumnya telah dicetuskan. Bagaimana untuk menyelesaikan masalah mengklik koringz untuk memunculkan kotak dialog sekunder Ketahui sedikit tentang js Kebanyakan pengaturcara tahu ini adalah acara menggelegak.

Perkara yang boleh mengosongkan acara menggelegak dalam Firefox ialah stopPropagation di bawah acara, jadi kami menambah baris kod e.stopPropagation() selepas klik kedua blok kod fungsi acara dan kemudian klik koringz dan mendapati bahawa 'koringz' muncul sekali . Seperti yang ditunjukkan dalam Rajah 5-06

5-06

Seterusnya, ujinya di bawah IE8 dan ketahui bahawa mengklik pada penyemak imbas IE8 juga muncul dua kali Penyelesaian kepada acara berhenti menggelegak IE8 ialah cacelBubble, dan kami hanya perlu menetapkan cacelBubble kepada benar.

Oleh kerana atribut acara cacelBubble yang disertakan dalam global di bawah IE8 bukanlah kaedah, tetapi objek yang mengeluarkan nilai Boolean, ini berbeza daripada Firefox, kecuali Firefox merangkum acara ini menjadi kaedah. Okay, sekarang kita menambah baris kod e.cancelBubble = true selepas blok kod acara klik kedua dan kemudian mengujinya di bawah pelayar IE8, dan kemudian klik koringz sekali lagi dan mendapati ia juga muncul sekali; Seperti yang ditunjukkan dalam Rajah 5-07

5-07

Perhatikan bahawa kod di atas untuk menghentikan acara menggelegak boleh ditulis secara berasingan mengikut penyemak imbas yang berbeza tiada atribut semua ini. Ini bermakna document.all ialah atribut unik di bawah versi IE8. Melaluinya kita boleh membezakan peristiwa menggelegak pelayar.

Setakat ini, kami telah menyelesaikan peristiwa menggelegak tetingkap Seterusnya, kami perlu menyelesaikan masalah peristiwa menimpa fungsi asal kerana ia ditakrifkan oleh berbilang orang. Mungkin juga ahli kakitangan syarikat terdahulu menambah acara ini, dan kemudian pekerja baharu menambah dan mengubah suai acara ini selepas mengambil alih projek, sekali gus meliputi masalah yang disebabkan oleh pelaksanaan acara asal. Maksudnya, menambahkan peristiwa sedemikian pada ID semasa beberapa kali tidak akan menimpa pelaksanaan fungsi asal acara ini.

Tetingkap di bawah firefox mengandungi kaedah addEventListener(type, listener, useCapture), dan kemudian kami mentakrifkan acara mendengar ini domElement.addEventListener(( 'click',function(e){confirm(e 'e')},false );, kemudian klik kandungan dalam penyemak imbas firefox untuk muncul dua kali Kali terakhir ia muncul ialah [objek MouseEvent]e, dan terdapat e tambahan di bahagian akhir saya menambahnya untuk membezakan. Seperti yang ditunjukkan dalam Rajah 5-08.

5-08

Seterusnya, saya menguji di bawah IE8 dan mendapati bahawa ralat addEventListener ditemui, tetapi saya melihat bahawa terdapat kaedah sedemikian di bawah tetingkap (saya mencubanya, dan ternyata kaedah ini boleh disokong dalam IE9 dan ke atas). IE8 juga mempunyai attachEvent(event, pdisp), kemudian kami menyediakan acara mendengar wyz.attachEvent('onclick', function(e){confirm(e 'e')}), nota: acara ialah 'onclick', dan kemudian klik di bawah IE8 dan ia akan muncul dua kali, eIE yang terakhir. Pada masa ini on('click',pdisp) dan attachEvent(event,pdisp) boleh digunakan bersama.

Ringkasnya, kami telah menyelesaikan keserasian acara DOM, peristiwa DOM yang menggelegak dan penggunaan semula acara DOM.

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
JavaScript dan Web: Fungsi teras dan kes penggunaanJavaScript dan Web: Fungsi teras dan kes penggunaanApr 18, 2025 am 12:19 AM

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

Memahami Enjin JavaScript: Butiran PelaksanaanMemahami Enjin JavaScript: Butiran PelaksanaanApr 17, 2025 am 12:05 AM

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python vs JavaScript: Keluk Pembelajaran dan Kemudahan PenggunaanPython vs JavaScript: Keluk Pembelajaran dan Kemudahan PenggunaanApr 16, 2025 am 12:12 AM

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Python vs JavaScript: Komuniti, Perpustakaan, dan SumberPython vs JavaScript: Komuniti, Perpustakaan, dan SumberApr 15, 2025 am 12:16 AM

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Dari C/C ke JavaScript: Bagaimana semuanya berfungsiDari C/C ke JavaScript: Bagaimana semuanya berfungsiApr 14, 2025 am 12:05 AM

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

Enjin JavaScript: Membandingkan PelaksanaanEnjin JavaScript: Membandingkan PelaksanaanApr 13, 2025 am 12:05 AM

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

Beyond the Browser: JavaScript di dunia nyataBeyond the Browser: JavaScript di dunia nyataApr 12, 2025 am 12:06 AM

Aplikasi JavaScript di dunia nyata termasuk pengaturcaraan sisi pelayan, pembangunan aplikasi mudah alih dan Internet of Things Control: 1. Pengaturcaraan sisi pelayan direalisasikan melalui node.js, sesuai untuk pemprosesan permintaan serentak yang tinggi. 2. Pembangunan aplikasi mudah alih dijalankan melalui reaktnatif dan menyokong penggunaan silang platform. 3. Digunakan untuk kawalan peranti IoT melalui Perpustakaan Johnny-Five, sesuai untuk interaksi perkakasan.

Membina aplikasi SaaS Multi-penyewa dengan Next.js (Integrasi Backend)Membina aplikasi SaaS Multi-penyewa dengan Next.js (Integrasi Backend)Apr 11, 2025 am 08:23 AM

Saya membina aplikasi SaaS multi-penyewa berfungsi (aplikasi edTech) dengan alat teknologi harian anda dan anda boleh melakukan perkara yang sama. Pertama, apakah aplikasi SaaS multi-penyewa? Aplikasi SaaS Multi-penyewa membolehkan anda melayani beberapa pelanggan dari Sing

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa