Selesaikan masalah yang disebabkan oleh peristiwa menggelegak JS: Untuk memahami cara mengendalikan peristiwa menggelegak sekaligus, anda memerlukan contoh kod khusus
Apabila menulis kod JavaScript, kami sering melibatkan pemprosesan acara. Konsep penting dalam pemprosesan acara ialah acara menggelegak. Peristiwa menggelegak bermakna apabila peristiwa pada elemen dicetuskan, elemen induknya juga akan mencetuskan peristiwa yang sama pada gilirannya. Walaupun mekanisme ini boleh menjadi sangat berguna dalam sesetengah situasi, ia kadangkala boleh menyebabkan masalah. Artikel ini akan memperkenalkan cara mengendalikan acara menggelegak dan memberikan contoh kod khusus.
1. Masalah dengan kejadian menggelegak
Sebelum memahami peristiwa menggelegak, mari kita lihat dahulu masalah yang mungkin disebabkan oleh peristiwa menggelegak. Katakan kita mempunyai struktur HTML seperti berikut:
<div class="outer"> <div class="inner"> <button class="btn">点击</button> </div> </div>
Kemudian, kita menggunakan JavaScript untuk menambah pengendali acara klik untuk butang:
var btn = document.querySelector('.btn'); btn.addEventListener('click', function() { console.log('按钮被点击了'); });
Sekarang, apabila kita mengklik butang, kita akan melihat output konsol "Button telah diklik" . Ini adalah perkara biasa kerana kami menambah pengendali acara klik pada butang.
Walau bagaimanapun, katakan kita juga menambah pengendali acara klik pada div luar:
var outer = document.querySelector('.outer'); outer.addEventListener('click', function() { console.log('外层div被点击了'); });
Kemudian, apabila kita mengklik butang, bukan sahaja ia akan mengeluarkan "Butang telah diklik", tetapi juga "Div luar telah diklik" " . Ini ialah masalah yang disebabkan oleh peristiwa menggelegak: apabila butang diklik, peristiwa klik juga dicetuskan pada elemen induknya.
2. Cara mengendalikan peristiwa menggelegak
Untuk menyelesaikan masalah yang disebabkan oleh peristiwa menggelegak, kita boleh menggunakan kaedah pemprosesan berikut:
stopPropagation
方法,可以停止事件的冒泡。示例代码如下:var btn = document.querySelector('.btn'); btn.addEventListener('click', function(event) { event.stopPropagation(); // 停止冒泡 console.log('按钮被点击了'); });
preventDefault
var link = document.querySelector('a'); link.addEventListener('click', function(event) { event.preventDefault(); // 阻止默认行为 console.log('链接被点击了'); });
preventDefault
objek acara. Kod sampel adalah seperti berikut: var outer = document.querySelector('.outer'); outer.addEventListener('click', function(event) { if (event.target.classList.contains('btn')) { // 判断事件的目标元素是否是按钮 console.log('按钮被点击了'); } });
Melalui perwakilan acara, anda hanya perlu mengikat pengendali acara kepada elemen induk untuk mengendalikan acara berbilang elemen anak, yang sangat memudahkan kod.
Atas ialah kandungan terperinci Menguasai kaedah pengendalian acara menggelegak: Selesaikan masalah yang disebabkan oleh peristiwa menggelegak JS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!