怎麼給元素添加事件? JS綁定事件三種方式解析
javascript作為腳本語言, 可以為頁面上的元素綁定事件,用於在指定事件發生時能自動調用相應的事件處理程序處理事件。那怎麼給元素添加事件?以下這篇文章跟大家介紹一下JS綁定事件三種方式,希望對大家有幫助!
為了讓瀏覽器在事件發生時能自動呼叫對應的事件處理程序處理事件,需要對事件來源綁定事件處理程序(綁定事件處理程序也叫註冊事件處理程序)。
綁定事件處理程序有以下3 種方式:
#在HTML 標籤中,使用事件屬性(例onclick)綁定事件處理程序。此方式透過設定標籤的事件屬性值為事件處理程序。這種方法現在不建議使用, html 和 js 耦合, 不利於維護。
在 js 中,使用事件來源的事件屬性(例onclick)綁定事件處理函數。此方式透過設定事件來源物件的事件屬性值為事件處理函數。
在 js 中,使用
addEventListener()
方法綁定事件和事件處理函數(IE9 之前的版本則使用 attach Event() 方法)。
1、使用HTML標籤的事件屬性綁定處理程序
需要注意的是,使用HTML 標籤的事件屬性綁定事件處理程序的方式時,事件屬性中的腳本代碼不能包含函數聲明,但可以是函數呼叫或一系列使用分號分隔的腳本代碼。
【範例 1】使用 HTML 標籤的事件屬性來綁定事件處理程序。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>使用HTML标签的事件属性绑定事件处理程序</title> </head> <body> <input type="button" onclick="var name='PHP中文网';alert(name);" value="事件绑定测试"/> </body> </html>
上述程式碼的 button 為 click 事件的目標對象,其透過標籤的事件屬性 onclick 綁定了兩個腳本程式碼進行事件的處理。上述程式碼在 Chrome 瀏覽器的運作後,當使用者點擊按鈕時,將彈出警告對話框,結果如下圖所示。
當事件處理程序涉及的程式碼在2 條以上時,如果還像範例1 那樣綁定事件處理程序,會使程式的可讀性變得很差。對此,可以將事件處理程序定義為一個函數,然後在事件屬性中呼叫該函數。
【範例 2】HTML 標籤的事件屬性為函數呼叫。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>HTML标签的事件属性为函数调用</title> <script> function printName(){ var name = "PHP中文网"; alert(name); } </script> </head> <body> <input type="button" onClick="printName()" value="事件绑定测试"/> </body> </html>
上述程式碼的執行結果和範例 1 完全相同。從上述兩個範例可以看到,標籤事件屬性將 JS 腳本程式碼和 HTML 標籤混合在一起,違反了 Web 標準的 JS 和 HTML 應分開的原則。所以,使用 HTML 標籤的事件屬性綁定事件處理程序不好,實際應用時應盡量避免使用。
2、使用事件來源的事件屬性綁定處理程序
#使HTML 和JS 分離的其中一種方式是透過使用事件來源的事件屬性綁定事件處理函數,綁定格式如下:
obj.on事件名 = 事件处理函数
格式中的obj 為事件來源物件。綁定的事件程式通常為一個匿名函數的定義語句,或是一個函數名稱。
事件來源的事件屬性綁定處理程序範例:
oBtn.onclick = function(){//oBtn为事件源对象,它的单击事件绑定了一个匿名函数定义 alert('hi') };
【範例 3】使用事件來源的事件屬性綁定事件處理函數。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>使用事件源的事件属性绑定事件处理函数</title> <script> window.onload = function(){//窗口加载事件绑定了一个匿名函数 //定义一个名为fn的函数 function fn(){ alert('hello'); } //获取事件源对象 var oBtn1 = document.getElementById("btn1"); var oBtn2 = document.getElementById("btn2"); //绑定一个匿名函数 oBtn1.onclick = function(){ alert("hi"); } //绑定一个函数名 oBtn2.onclick = fn; }; </script> </head> <body> <input type="button" id="btn1" value="绑定一个匿名函数"> <input type="button" id="btn2" value="绑定一个函数名"> </body> </html>
上述 JS 程式碼中處理了 3 個事件:文件視窗載入事件 load、兩個按鈕的點擊事件 click。這三個事件的處理都是使用事件來源的事件屬性綁定事件處理函數來實現的,其中load 事件和第一個按鈕的click事件綁定的是匿名函數,而第二個按鈕的click事件綁定定的是一個函數名。
需要特別注意的是,不能在oBtn2 綁定的函數名稱後面加“()”,否則綁定的函數變為函數調用,這樣就會在JS 引擎執行到該行程式碼時自動呼叫執行,而在事件觸發時卻不會執行了。
在文件所有元素載入完成後會處理視窗載入事件函數,而按一下每個按鈕時將會觸發點擊事件。點擊第一個和第二個按鈕後,將分別跳出顯示「hi」和「hello」兩個警告對話框。
3、使用addEventListener()綁定處理程序
使用事件來源物件的事件屬性綁定事件處理程序方式雖然簡單,但其存在一個不足之處:一個事件只能綁定一個處理程序,後面綁定的事件處理函數會覆蓋前面綁定的事件處理函數。實際應用中,一個事件來源的一個事件可能會用到多個函數來處理。
当一个事件源需要使用多个函数来处理时,可以通过事件源调用 addEventListener()(针对标准浏览器)来绑定事件处理函数以实现此需求。一个事件源通过方法绑定多个事件函数的实现方式是:对事件源对象调用多次 addEventListener(),其中每次的调用只绑定一个事件处理函数。
addEventListener() 是标准事件模型中的一个方法,对所有标准浏览器都有效。使用 addEvent Liste ner() 绑定事件处理程序的格式如下:
事件源.addEventListener(事件名称,事件处理函数名,是否捕获);
参数“事件名称”是一个不带“on”的事件名;参数“是否捕获”是一个布尔值,默认值为 false,取 false 时实现事件冒泡,取 true 时实现事件捕获。
通过多次调用 addEventListener() 可以为一个事件源对象的同一个事件类型绑定多个事件处理函数。当对象发生事件时,所有该事件绑定的事件处理函数就会按照绑定的顺序依次调用执行。另外,需要注意的是,addEventListener() 绑定的事件处理函数中的 this 指向事件源。
addEventListener() 绑定处理程序示例:
document.addEventListener('click',fn1,false);//click事件绑定fn1函数实现事件冒泡 document.addEventListener('click',fn2,true);//click事件绑定fn2函数实现事件捕获
【例 4】使用 addEventListener() 绑定事件函数。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>使用addEventListener()/attachEvent()绑定事件函数</title> <script> function fn1(){ alert("fn1()"); } function fn2(){ alert("fn2()"); } function bindTest(){ document.addEventListener('click',fn1,false);//首先绑定fn1函数 document.addEventListener('click',fn2,false); } bindTest();//调用函数 </script> </head> <body> </body> </html>
上述代码在浏览器中运行后,当单击文档窗口时,会依次弹出显示“fn1()”和“fn2()”的警告对话框。
【推荐学习:javascript高级教程】
以上是怎麼給元素添加事件? JS綁定事件三種方式解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數
