LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

JavaScript 21天入門:事件處理(Events)

admin
2024年10月22日 21:57 本文熱度 940

簡(jiǎn)單來(lái)說(shuō),事件就是用戶或?yàn)g覽器執(zhí)行的某些動(dòng)作,比如說(shuō)點(diǎn)擊按鈕、移動(dòng)鼠標(biāo)、按下鍵盤等等。

通過(guò)捕獲事件之后處理事件,可以讓網(wǎng)頁(yè)對(duì)這些動(dòng)作做出響應(yīng),進(jìn)而實(shí)現(xiàn)更豐富的交互效果。

事件的類型

JavaScript 中事件的類型非常多,比較常用且典型的有以下幾種:

  • 鼠標(biāo)事件類:如 click(點(diǎn)擊)、dblclick(雙擊)、mouseover(鼠標(biāo)移入)、mouseout(鼠標(biāo)移出)等。

  • 鍵盤事件類:如 keydown(按下鍵)、keyup(釋放鍵)等。

  • 表單事件類:如 submit(提交表單)、change(表單元素值改變)等。

  • 窗口事件類:如 load(頁(yè)面加載完成)、resize(窗口大小改變)等。

事件監(jiān)聽

不用擔(dān)心事件太多,因?yàn)樗惺录奶幚矶伎梢酝ㄟ^(guò) addEventListener 方法來(lái)添加事件監(jiān)聽器。

這個(gè)方法有三個(gè)參數(shù):事件類型、事件處理函數(shù)和一個(gè)布爾值(表示是否在捕獲階段處理事件)。

// 添加事件監(jiān)聽器 document.getElementById('myButton').addEventListener(   'click',   function (event) {     alert('按鈕被點(diǎn)擊了!');   },   false ); 

在上面的代碼中,我們給一個(gè)按鈕添加了 click 事件的監(jiān)聽器。

當(dāng)按鈕被點(diǎn)擊時(shí),會(huì)彈出一個(gè)提示框。

第三個(gè)參數(shù) false 表示在事件冒泡階段處理事件。

事件冒泡

事件冒泡指的是當(dāng)一個(gè)事件發(fā)生在某個(gè)元素上時(shí),這個(gè)事件會(huì)從最內(nèi)層的目標(biāo)元素開始,一層一層向上傳遞,直到最外層的元素。

這個(gè)過(guò)程就像水泡從水底冒到水面一樣,因此被稱為“事件冒泡”。

假設(shè)有一個(gè)嵌套的 HTML 結(jié)構(gòu),如下所示:

<div id="outer">   <div id="inner">     <button id="myButton">點(diǎn)擊我</button>   </div> </div> 

當(dāng)我們點(diǎn)擊按鈕時(shí),click 事件會(huì)首先在按鈕元素上觸發(fā),然后依次向上傳遞到 inner 和 outer 元素,最后到達(dá) document 對(duì)象。這就是事件冒泡的過(guò)程。

事件冒泡的示例

可以通過(guò)添加事件監(jiān)聽器來(lái)觀察事件冒泡的過(guò)程:

<script>   document.getElementById('outer').addEventListener('click', function () {     console.log('外層 div 被點(diǎn)擊');   });    document.getElementById('inner').addEventListener('click', function () {     console.log('內(nèi)層 div 被點(diǎn)擊');   });    document.getElementById('myButton').addEventListener('click', function () {     console.log('按鈕被點(diǎn)擊');   }); </script> 

在這個(gè)示例中,當(dāng)我們點(diǎn)擊按鈕時(shí),控制臺(tái)會(huì)依次輸出:

按鈕被點(diǎn)擊 內(nèi)層 div 被點(diǎn)擊 外層 div 被點(diǎn)擊 

這說(shuō)明事件從按鈕開始,依次向上傳遞到內(nèi)層 div 和外層 div,也就是事件冒泡的過(guò)程。

阻止事件冒泡

當(dāng)不希望事件冒泡到上層元素時(shí),可以使用事件對(duì)象的 stopPropagation 方法來(lái)阻止事件冒泡:

document.getElementById('myButton').addEventListener('click', function (event) {   event.stopPropagation();   console.log('按鈕被點(diǎn)擊'); }); 

在按鈕的點(diǎn)擊事件處理函數(shù)中調(diào)用了 event.stopPropagation 方法,這樣點(diǎn)擊按鈕時(shí),事件就不會(huì)冒泡到內(nèi)層和外層的 div 元素了。

事件捕獲

除了事件冒泡,還有一個(gè)相反的過(guò)程叫做事件捕獲。

事件捕獲是指事件從最外層的元素開始,一層一層向內(nèi)傳遞,直到目標(biāo)元素。

我們可以通過(guò)在 addEventListener 方法的第三個(gè)參數(shù)中傳遞 true 來(lái)啟用事件捕獲:

document.getElementById('outer').addEventListener(   'click',   function () {     console.log('外層 div 被點(diǎn)擊');   },   true );  document.getElementById('inner').addEventListener(   'click',   function () {     console.log('內(nèi)層 div 被點(diǎn)擊');   },   true );  document.getElementById('myButton').addEventListener(   'click',   function () {     console.log('按鈕被點(diǎn)擊');   },   true ); 

在這個(gè)示例中,當(dāng)我們點(diǎn)擊按鈕時(shí),控制臺(tái)會(huì)依次輸出:

外層 div 被點(diǎn)擊 內(nèi)層 div 被點(diǎn)擊 按鈕被點(diǎn)擊 

移除事件監(jiān)聽

可以使用 removeEventListener 方法來(lái)實(shí)現(xiàn)移除事件監(jiān)聽,該方法的參數(shù)與 addEventListener 方法相同。

// 定義事件處理函數(shù) function handleClick(event) {   alert('按鈕被點(diǎn)擊了!'); }  // 添加事件監(jiān)聽器 document   .getElementById('myButton')   .addEventListener('click', handleClick, false);  // 移除事件監(jiān)聽器 document   .getElementById('myButton')   .removeEventListener('click', handleClick, false); 

事件處理

如前面展開的描述,事件處理主要分為兩個(gè)階段:事件捕獲和事件冒泡。

  • 事件捕獲:事件從最外層的元素開始,一層一層向內(nèi)傳遞,直到目標(biāo)元素。

  • 事件冒泡:事件從目標(biāo)元素開始,一層一層向外傳遞,直到最外層的元素。

事件對(duì)象

當(dāng)事件發(fā)生時(shí),瀏覽器會(huì)創(chuàng)建一個(gè)事件對(duì)象,并將其傳遞給事件處理函數(shù)。

通過(guò)這個(gè)事件對(duì)象,我們可以獲取事件的詳細(xì)信息,比如事件類型、目標(biāo)元素、鼠標(biāo)位置等。

document.getElementById('myButton').addEventListener('click', function (event) {   console.log('事件類型:' + event.type);   console.log('目標(biāo)元素:' + event.target);   console.log('鼠標(biāo)位置:' + event.clientX + ', ' + event.clientY); }); 

通過(guò)事件對(duì)象 event 可以獲取事件的類型、目標(biāo)元素和鼠標(biāo)位置等信息。

事件處理的示例

來(lái)看一個(gè)完整的如何處理不同類型的事件的示例:

這個(gè)頁(yè)面有一個(gè)按鈕,一個(gè)輸入框。

<!DOCTYPE html> <html lang="en">   <head>     <meta charset="UTF-8" />     <title>事件處理示例</title>   </head>   <body>     <button id="myButton">點(diǎn)擊我</button>     <input type="text" id="myInput" placeholder="輸入文字" />     <script>       // 處理點(diǎn)擊事件       document         .getElementById('myButton')         .addEventListener('click', function () {           alert('按鈕被點(diǎn)擊了!');         });        // 處理鍵盤事件       document         .getElementById('myInput')         .addEventListener('keydown', function (event) {           console.log('按下了鍵:' + event.key);         });        // 處理表單事件       document         .getElementById('myInput')         .addEventListener('change', function () {           console.log('輸入框的值改變了:' + this.value);         });     </script>   </body> </html> 

分別處理了按鈕的點(diǎn)擊事件、輸入框的鍵盤事件和輸入框的值改變事件。

現(xiàn)在你也可以開始自己試試事件處理了!

總結(jié)

  • ?? 事件就是用戶或?yàn)g覽器執(zhí)行的某些動(dòng)作,比如說(shuō)點(diǎn)擊按鈕、移動(dòng)鼠標(biāo)、按下鍵盤等等。

  • ?? 所有事件的處理都可以通過(guò) addEventListener 方法來(lái)添加事件監(jiān)聽器。

  • ?? 事件處理主要分為兩個(gè)階段:事件捕獲和事件冒泡。


該文章在 2024/10/23 9:41:28 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
日韩一区久久久久久 | 中文字幕a级片 | 亚洲人成电影手机在线网站 | 亚洲综合色丁香婷婷六月图片 | 五月天精品视频在线观看 | 亚洲欧美一区二区不卡精品 |