原生JavaScript中事件綁定的三種方式
一、HTML 標(biāo)簽中的事件屬性綁定
這是最早期也是最簡(jiǎn)單的事件綁定方式,通過在 HTML 標(biāo)簽上直接添加事件屬性來實(shí)現(xiàn)。
<button onclick="alert('按鈕被點(diǎn)擊了')">點(diǎn)擊我</button>
原理說明:
- 使用事件屬性(如
onclick、onmouseover、onchange等)直接綁定一個(gè)內(nèi)聯(lián)的 JavaScript 表達(dá)式。 - 當(dāng)用戶與該元素交互時(shí),瀏覽器會(huì)執(zhí)行屬性值對(duì)應(yīng)的代碼。
優(yōu)點(diǎn):
- 書寫簡(jiǎn)單,適合快速測(cè)試或 demo 頁面。
- 不需要額外的 JavaScript 文件。
缺點(diǎn):
- 結(jié)構(gòu)不清晰:HTML 中混入了 JS 邏輯,違背了“結(jié)構(gòu)與行為分離”的原則。
- 不利于維護(hù):代碼冗雜且不易管理,尤其是在大型項(xiàng)目中。
- 不支持多個(gè)監(jiān)聽器:同一事件只能綁定一個(gè)處理函數(shù)。
使用建議:
僅適合簡(jiǎn)單演示或快速開發(fā),不推薦在生產(chǎn)環(huán)境中使用。
二、DOM 元素對(duì)象的事件屬性綁定
這種方式將事件綁定邏輯寫在 JavaScript 中,保持了 HTML 的整潔。
<button id="myBtn">點(diǎn)擊我</button>
<script>
const btn = document.getElementById('myBtn');
btn.onclick = function () {
alert('按鈕點(diǎn)擊事件觸發(fā)!');
};
</script>
原理說明:
- 通過 DOM 操作獲取元素對(duì)象;
- 直接設(shè)置事件屬性(如
onclick)為一個(gè)函數(shù),事件觸發(fā)時(shí)會(huì)執(zhí)行該函數(shù)。
優(yōu)點(diǎn):
- HTML 與 JavaScript 分離,代碼結(jié)構(gòu)更加清晰;
- 易于調(diào)試和管理。
缺點(diǎn):
- 只能綁定一個(gè)事件處理函數(shù):如果對(duì)同一事件重復(fù)賦值,后一個(gè)會(huì)覆蓋前一個(gè)。
btn.onclick = function () {
alert('第一個(gè)處理函數(shù)');
};
btn.onclick = function () {
alert('第二個(gè)處理函數(shù)'); // 會(huì)覆蓋前面的綁定
};
使用建議:
相比 HTML 內(nèi)聯(lián)方式更優(yōu),但由于無法綁定多個(gè)處理函數(shù),也不支持事件捕獲機(jī)制,適合簡(jiǎn)單項(xiàng)目或?qū)W習(xí)使用。
三、使用 addEventListener 方法綁定
這是現(xiàn)代 JavaScript 中推薦使用的事件綁定方式,功能強(qiáng)大且靈活。
<button id="myBtn">點(diǎn)擊我</button>
<script>
const btn = document.getElementById('myBtn');
btn.addEventListener('click', function () {
alert('使用 addEventListener 綁定的事件');
});
});
原理說明:
addEventListener是 DOM 提供的方法,接受三個(gè)參數(shù):事件類型(如
'click'、'keydown');事件處理函數(shù);
可選的布爾值或?qū)ο?,用于指定事件是否在捕獲階段觸發(fā)(默認(rèn)為冒泡階段)。
element.addEventListener(type, listener, options);
優(yōu)點(diǎn):
- 支持多個(gè)事件監(jiān)聽器:不會(huì)覆蓋,多個(gè)處理函數(shù)可以依次執(zhí)行。
- 支持事件冒泡與捕獲機(jī)制;
- 可移除事件監(jiān)聽器(使用
removeEventListener); - 語義清晰,便于維護(hù)和擴(kuò)展。
function handler1() {
alert('處理函數(shù)1');
}
function handler2() {
alert('處理函數(shù)2');
}
btn.addEventListener('click', handler1);
btn.addEventListener('click', handler2); // 兩者都觸發(fā)
缺點(diǎn):
- 寫法相對(duì)較長(zhǎng),尤其是在綁定多個(gè)事件時(shí);
- 必須傳入相同的函數(shù)引用才能移除事件監(jiān)聽器。
btn.removeEventListener('click', handler1);
使用建議:
addEventListener 是現(xiàn)代前端開發(fā)的首選事件綁定方式,推薦在所有正式項(xiàng)目中使用。
結(jié)語
在實(shí)際開發(fā)中,推薦優(yōu)先使用 addEventListener,它提供了最大的靈活性和最好的兼容性,是構(gòu)建交互性網(wǎng)頁的標(biāo)準(zhǔn)做法。
以上就是原生JavaScript中事件綁定的三種方式的詳細(xì)內(nèi)容,更多關(guān)于JavaScript事件綁定的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
一文詳解JavaScript中的相等運(yùn)算符與類型轉(zhuǎn)換
在?JavaScript?編程中,相等運(yùn)算符和類型轉(zhuǎn)換是理解語言行為的關(guān)鍵部分,雖然這些概念看似簡(jiǎn)單,但它們的細(xì)節(jié)可能會(huì)導(dǎo)致意想不到的結(jié)果,本文將深入探討?==?和?===?運(yùn)算符的區(qū)別、對(duì)象比較、以及?JavaScript?中的顯式和隱式類型轉(zhuǎn)換,需要的朋友可以參考下2024-07-07
學(xué)習(xí)javascript面向?qū)ο?掌握創(chuàng)建對(duì)象的9種方式
這篇文章主要為大家介紹了創(chuàng)建對(duì)象的9種方式,幫助大家更好地學(xué)習(xí)javascript面向?qū)ο螅信d趣的小伙伴們可以參考一下2016-01-01
JS小功能(列表頁面隔行變色)簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要介紹了JS列表頁面隔行變色簡(jiǎn)單實(shí)現(xiàn),有需要的朋友可以參考一下2013-11-11
javascript:void(0)的真正含義實(shí)例分析
void操作符解釋2008-08-08
JS實(shí)現(xiàn)的簡(jiǎn)單下拉框聯(lián)動(dòng)功能示例
這篇文章主要介紹了JS實(shí)現(xiàn)的簡(jiǎn)單下拉框聯(lián)動(dòng)功能,涉及javascript事件響應(yīng)及頁面元素屬性動(dòng)態(tài)修改相關(guān)操作技巧,需要的朋友可以參考下2018-05-05
JSON.parse()和JSON.stringify()使用介紹
這篇文章主要介紹了JSON.parse()和JSON.stringify()使用,需要的朋友可以參考下2014-06-06

