Rumah >hujung hadapan web >tutorial js >Tiada sokongan untuk acara menggelegak: had dan skop
Acara Bubbling merujuk kepada kaedah penghantaran acara yang dicetuskan langkah demi langkah daripada elemen anak kepada elemen induk dalam pepohon DOM. Dalam kebanyakan kes, peristiwa menggelegak adalah sangat fleksibel dan berskala, tetapi terdapat beberapa kes khas di mana peristiwa tidak menyokong menggelegak.
1. Acara manakah yang tidak menyokong gelembung?
Walaupun kebanyakan acara menyokong menggelegak, terdapat beberapa acara yang tidak menyokong menggelegak. Berikut ialah beberapa peristiwa biasa yang tidak menyokong menggelegak:
Untuk lebih memahami had peristiwa menggelegak, contoh kod khusus diberikan di bawah untuk setiap acara yang tidak menyokong menggelegak untuk pemahaman yang lebih baik:
<div> <input type="text" id="myInput"> </div>Kod JavaScript:
const myInput = document.getElementById('myInput'); myInput.addEventListener('focus', function() { console.log('Input获得焦点'); }); const myDiv = document.querySelector('div'); myDiv.addEventListener('focus', function() { console.log('Div获得焦点'); });Hasil:
Apabila kotak teks mendapat fokus, hanya "Input mendapat fokus" akan dikeluarkan dalam konsol, tetapi "Div mendapat fokus" tidak akan dikeluarkan. Kerana acara fokus tidak menggelembung ke div elemen induk.
<div> <img src="image.png" id="myImage" alt="Tiada sokongan untuk acara menggelegak: had dan skop" > </div>Kod JavaScript:
const myImage = document.getElementById('myImage'); myImage.addEventListener('load', function() { console.log('图片加载完成'); }); const myDiv = document.querySelector('div'); myDiv.addEventListener('load', function() { console.log('Div加载完成'); });Keputusan:
Apabila pemuatan imej selesai, hanya "Pemuatan imej selesai" akan dikeluarkan dalam konsol dan "Pemuatan Div selesai" tidak akan dikeluarkan. Kerana acara pemuatan tidak menggelembung ke div elemen induk.
<input type="text" id="myInput">Kod JavaScript:
const myInput = document.getElementById('myInput'); myInput.addEventListener('input', function() { console.log('输入框值改变'); }); const myForm = document.querySelector('form'); myForm.addEventListener('input', function() { console.log('表单值改变'); });Keputusan:
Apabila nilai kotak input berubah, hanya "Perubahan nilai kotak input" akan dikeluarkan pada konsol, tetapi "Perubahan nilai bentuk" tidak akan keluaran. Kerana peristiwa input tidak menggelembung ke bentuk elemen induk.
<form id="myForm"> <input type="submit" value="提交"> </form>Kod JavaScript:
const myForm = document.getElementById('myForm'); myForm.addEventListener('submit', function(event) { event.preventDefault(); console.log('表单已提交'); }); const myDiv = document.querySelector('div'); myDiv.addEventListener('submit', function() { console.log('Div提交'); });Keputusan:
Apabila butang hantar diklik, hanya "Borang Dihantar" akan dikeluarkan dalam konsol, tetapi "Div Dihantar" tidak akan dikeluarkan. Kerana acara serah tidak mencecah div elemen induk. Ambil perhatian bahawa dalam contoh kita menghalang kelakuan penyerahan lalai borang melalui kaedah event.preventDefault().
<div style="height: 100px; width: 100px; overflow: auto;"> <p>这是一段很长的文本</p> </div>Kod JavaScript:
const myDiv = document.querySelector('div'); myDiv.addEventListener('scroll', function() { console.log('滚动'); });Keputusan:
Apabila div ditatal, "scroll" hanya akan dikeluarkan dalam konsol dan tidak akan menggelembung ke elemen atas.
<div id="myDiv" style="background-color: yellow; width: 100px; height: 100px;"> <p>鼠标进入这个div</p> </div>Kod JavaScript:
const myDiv = document.getElementById('myDiv'); myDiv.addEventListener('mouseenter', function() { console.log('鼠标进入div'); }); const myBody = document.querySelector('body'); myBody.addEventListener('mouseenter', function() { console.log('鼠标进入body'); });Keputusan:
Apabila tetikus memasuki div, hanya "tetikus memasuki div" akan dikeluarkan dalam konsol, tetapi "tetikus memasuki badan" tidak akan dikeluarkan.
<div id="myDiv" style="background-color: yellow; width: 100px; height: 100px;"></div>Kod JavaScript:
const myDiv = document.getElementById('myDiv'); myDiv.addEventListener('contextmenu', function(event) { event.preventDefault(); console.log('右键点击'); }); const myBody = document.querySelector('body'); myBody.addEventListener('contextmenu', function() { console.log('右键点击body'); });Keputusan:
Apabila anda klik kanan pada div, hanya "klik kanan" akan dikeluarkan dalam konsol, tetapi "klik kanan pada badan" akan bukan keluaran. Ambil perhatian bahawa dalam contoh kami menghalang menu konteks lalai daripada dipaparkan melalui kaedah event.preventDefault().
Acara buih ialah kaedah penyampaian acara yang mencetuskan acara langkah demi langkah daripada elemen anak kepada elemen induk dalam pepohon DOM, tetapi terdapat juga beberapa acara istimewa yang tidak menyokong menggelegak. Artikel ini menganalisis peristiwa yang tidak menyokong menggelegak melalui contoh kod tertentu, dengan harapan dapat membantu pembaca memahami pengehadan peristiwa menggelegak.
Atas ialah kandungan terperinci Tiada sokongan untuk acara menggelegak: had dan skop. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!