首頁  >  文章  >  web前端  >  不支持冒泡的事件:限制及範圍

不支持冒泡的事件:限制及範圍

王林
王林原創
2024-01-13 12:51:06763瀏覽

不支持冒泡的事件:限制及範圍

冒泡事件(Bubbling Event)是指在DOM樹中從子元素逐級觸發父元素的事件傳遞方式。大多數情況下,冒泡事件具有良好的靈活性和可擴展性,但是也存在一些特殊情況,這些情況下事件不支持冒泡。

一、哪些事件不支持冒泡?
雖然大部分的事件都支持冒泡,但存在一些事件是不支持冒泡的。以下是一些常見的不支持冒泡的事件:

  1. focus和blur事件
  2. #load和unload事件
  3. input、select和change事件
  4. submit和reset事件
  5. scroll事件
  6. mouseenter和mouseleave事件
  7. contextmenu事件

二、事件範例
為了更了解冒泡事件的局限性,以下針對每個不支援冒泡的事件給出具體的程式碼範例,以便更好地理解:

    ##focus和blur事件
  1. focus和blur事件是用來處理元素獲取或失去焦點的事件。這些事件不支援冒泡,表示當你在子元素上觸發focus或blur事件時,不會觸發父元素上的相應事件。
HTML程式碼:

<div>
  <input type="text" id="myInput">
</div>

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获得焦点');
});

結果:

當文字方塊取得焦點時,只會在控制台輸出"Input取得焦點",而不會輸出"Div獲得焦點"。因為focus事件沒有冒泡到父元素div。

    load和unload事件
  1. load和unload事件是在頁面或資源載入完成後觸發的事件。這些事件不支援冒泡,也就是說當子元素上觸發load或unload事件時,不會觸發父元素上的相應事件。
HTML程式碼:

<div>
  <img  src="image.png" id="myImage" alt="不支持冒泡的事件:限制及範圍" >
</div>

JavaScript程式碼:

const myImage = document.getElementById('myImage');
myImage.addEventListener('load', function() {
  console.log('图片加载完成');
});
const myDiv = document.querySelector('div');
myDiv.addEventListener('load', function() {
  console.log('Div加载完成');
});

結果:

當圖片載入完成時,只會在控制台輸出"圖片載入完成",而不會輸出"Div載入完成"。因為load事件沒有冒泡到父元素div。

    input、select和change事件
  1. input、select和change事件是用來處理表單元素值改變的事件。這些事件只作用於實際發生值改變的元素,不會冒泡到父元素。
HTML程式碼:

<input type="text" id="myInput">

JavaScript程式碼:

const myInput = document.getElementById('myInput');
myInput.addEventListener('input', function() {
  console.log('输入框值改变');
});
const myForm = document.querySelector('form');
myForm.addEventListener('input', function() {
  console.log('表单值改变');
});

結果:

當輸入方塊的值改變時,只會在控制台輸出"輸入框值改變",而不會輸出"表單值改變"。因為input事件沒有冒泡到父元素form。

    submit和reset事件
  1. submit和reset事件是在提交和重置表單時觸發的事件。這些事件只能套用於form元素本身,不會冒泡到父元素。
HTML程式碼:

<form id="myForm">
  <input type="submit" value="提交">
</form>

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提交');
});

結果:

當點擊提交按鈕時,只會在控制台輸出"表單已提交",而不會輸出"Div提交"。因為submit事件沒有冒泡到父元素div。注意到範例中我們透過event.preventDefault()方法阻止了表單的預設提交行為。

    scroll事件
  1. scroll事件是在發生捲動時觸發的事件。這個事件不支援冒泡,也就是說當滾動一個元素時,不會觸發父元素上的scroll事件。
HTML程式碼:

<div style="height: 100px; width: 100px; overflow: auto;">
  <p>这是一段很长的文本</p>
</div>

JavaScript程式碼:

const myDiv = document.querySelector('div');
myDiv.addEventListener('scroll', function() {
  console.log('滚动');
});

結果:

當捲動div時,只會在控制台輸出"捲動",而不會冒泡到上層元素。

    mouseenter和mouseleave事件
  1. mouseenter和mouseleave事件是在滑鼠進入和離開元素時觸發的事件。這些事件不支援冒泡,也就是說當滑鼠進入或離開一個元素時,不會觸發父元素上的相應事件。
HTML程式碼:

<div id="myDiv" style="background-color: yellow; width: 100px; height: 100px;">
  <p>鼠标进入这个div</p>
</div>

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');
});

結果:

當滑鼠進入div時,只會在控制台輸出"滑鼠進入div ",而不會輸出"滑鼠進入body"。

    contextmenu事件
  1. contextmenu事件是在滑鼠右鍵點擊時觸發的事件。這個事件並不支援冒泡,也就是說當右鍵點擊一個元素時,不會觸發父元素上的contextmenu事件。
HTML程式碼:

<div id="myDiv" style="background-color: yellow; width: 100px; height: 100px;"></div>

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');
});

結果:

當右鍵點擊div時,只會在控制台輸出"右鍵點擊" ,而不會輸出"右鍵點選body"。注意到範例中我們透過event.preventDefault()方法阻止了預設的上下文選單顯示。

三、總結

冒泡事件是DOM樹中子元素向父元素逐級觸發的一種事件傳遞方式,大部分的事件都支持冒泡,但也存在一些不支持冒泡的特殊事件。本文透過具體的程式碼範例分析了不支持冒泡的事件,希望能對讀者理解冒泡事件的限制有所幫助。

以上是不支持冒泡的事件:限制及範圍的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn