JavaScript HTML DOM 事件監聽介紹 | JavaScript 教程

2021-03-06 跟誰學編程
addEventListener() 方法

在用戶點擊按鈕時觸發監聽事件:

document.getElementById("myBtn").addEventListener("click", displayDate);

點擊下方「閱讀原文」可親試效果

addEventListener() 方法用於向指定元素添加事件句柄。

addEventListener() 方法添加的事件句柄不會覆蓋已存在的事件句柄。

你可以向一個元素添加多個事件句柄。

你可以向同個元素添加多個同類型的事件句柄,如:兩個 「click」 事件。

你可以向任何 DOM 對象添加事件監聽,不僅僅是 HTML 元素。如:window 對象。

addEventListener() 方法可以更簡單的控制事件(冒泡與捕獲)。

當你使用 addEventListener() 方法時, JavaScript 從 HTML 標記中分離開來,可讀性更強, 在沒有控制HTML標記時也可以添加事件監聽。

你可以使用 removeEventListener() 方法來移除事件的監聽。

語法格式

element.addEventListener(event, function, useCapture);

第一個參數是事件的類型 (如 「click」 或 「mousedown」).

第二個參數是事件觸發後調用的函數。

第三個參數是個布爾值用於描述事件是冒泡還是捕獲。該參數是可選的。

提示:不要使用 「on」 前綴。例如,使用 「click」 ,而不是使用 「onclick」。向原元素添加事件句柄

當用戶點擊元素時彈出 「Hello World!」 :

element.addEventListener("click", function(){ alert("Hello World!"); });

點擊下方「閱讀原文」可親試效果

你可以使用函數名,來引用外部函數:

當用戶點擊元素時彈出 「Hello World!」 :

element.addEventListener("click", myFunction);

function myFunction() {
alert ("Hello World!");
}

點擊下方「閱讀原文」可親試效果

向同一個元素中添加多個事件句柄

addEventListener() 方法允許向同一個元素添加多個事件,且不會覆蓋已存在的事件:

element.addEventListener("click", myFunction);
element.addEventListener("click", mySecondFunction);

點擊下方「閱讀原文」可親試效果

你可以向同個元素添加不同類型的事件:

element.addEventListener("mouseover", myFunction);
element.addEventListener("click", mySecondFunction);
element.addEventListener("mouseout", myThirdFunction);

點擊下方「閱讀原文」可親試效果

向 Window 對象添加事件句柄

addEventListener() 方法允許你在 HTML DOM 對象添加事件監聽, HTML DOM 對象如:HTML 元素, HTML 文檔, window 對象。或者其他支出的事件對象如: xmlHttpRequest 對象。

當用戶重置窗口大小時添加事件監聽:

window.addEventListener("resize", function(){ document.getElementById("demo").innerHTML = sometext; });

點擊下方「閱讀原文」可親試效果

傳遞參數

當傳遞參數值時,使用」匿名函數」調用帶參數的函數:

element.addEventListener("click", function(){ myFunction(p1, p2); });

點擊下方「閱讀原文」可親試效果

事件冒泡或事件捕獲?

事件傳遞有兩種方式:冒泡與捕獲。

事件傳遞定義了元素事件觸發的順序。如果你將 <p> 元素插入到 <div> 元素中,用戶點擊 <p> 元素, 哪個元素的 「click」 事件先被觸發呢?

在 冒泡 中,內部元素的事件會先被觸發,然後再觸發外部元素,即:<p> 元素的點擊事件先觸發,然後會觸發 <div> 元素的點擊事件。

在 捕獲 中,外部元素的事件會先被觸發,然後才會觸發內部元素的事件,即:<div> 元素的點擊事件先觸發 ,然後再觸發 <p> 元素的點擊事件。

addEventListener() 方法可以指定 「useCapture」 參數來設置傳遞類型:

addEventListener(event,function, useCapture);

默認值為 false, 即冒泡傳遞,當值為 true 時, 事件使用捕獲傳遞。

document.getElementById(「myDiv」).addEventListener(「click」, myFunction, true);

效果展示:

實例演示了在添加不同事件監聽時,冒泡與捕獲的不同。

點擊下方「閱讀原文」可親試效果

removeEventListener() 方法

removeEventListener() 方法移除由 addEventListener() 方法添加的事件句柄:

element.removeEventListener("mousemove", myFunction);

點擊下方「閱讀原文」可親試效果

瀏覽器支持

表格中的數字表示支持該方法的第一個瀏覽器的版本號。

方法addEventListener()1.09.01.01.07.0removeEventListener()1.09.01.01.07.0

提示: IE 8 及更早 IE 版本,Opera 7.0及其更早版本不支持 addEventListener() 和 removeEventListener() 方法。但是,對於這類瀏覽器版本可以使用 detachEvent() 方法來移除事件句柄:

element.attachEvent(event, function);element.detachEvent(event, function);

跨瀏覽器解決方法:

var x = document.getElementById("myBtn");
if (x.addEventListener) { // 所有主流瀏覽器,除了 IE 8 及更早版本
x.addEventListener("click", myFunction);
} else if (x.attachEvent) { // IE 8 及更早版本
x.attachEvent("onclick", myFunction);
}

點擊下方「閱讀原文」可親試效果

HTML DOM 事件對象參考手冊

所有 HTML DOM 事件,可以查看我們完整的 HTML DOM Event 對象參考手冊。

長按二維碼關注公眾號,查閱更多教程

相關焦點

  • 網頁性能之html css javascript
    2 圖中紅框內的這部分時間則表示瀏覽器從下載完成html之後開始構建dom,當發現一個image標籤時所花費的時間,由此可見dom是順序執行的,當發現image時便立即發起請求,而紫色透明條則是image發起請求時在網絡傳輸時所消耗的時間。3 圖中timeline藍色豎線所處的時間為domComplete時間,紅色豎線為dom的onload時間,由此可見兩種事件的差異。
  • JavaScript HTML DOM 事件介紹 | JavaScript 教程
    DOCTYPE html><html> <body> <h1 onclick="this.innerHTML='Ooops!'">點擊文本!</h1> </body></html>效果展示:點擊文本!
  • 第五篇:JavaScript事件處理
    JS如何監聽事件?如果JS需要對DOM對象觸發的事件進行處理,就需要監聽這些事件,瀏覽器會自動調用監聽事件的JS函數。JS有三種監聽事件的方式:分別是內聯屬性監聽、DOM屬性綁定監聽和使用事件監聽函數。
  • JavaScript函數 - 事件驅動
    什麼是事件驅動函數? 最後給大家補充一個知識,叫做事件驅動函數,它到底是做什麼的呢?在頁面交互的過程中所調用的函數,該函數被稱之為事件驅動函數。現在先來簡單的了解一下,以後會詳細講到什麼是事件?和頁面交互的行為稱之為事件比如:滑鼠點擊某個按鈕時(onclick)、滑鼠浮動,或者滑鼠離開某一個區域(onmouseover、onmouseout)、文本框獲取焦點和失去焦點時(onfocus、onblur)等等如果我們想給一個按鈕綁定一個事件,就要通過事件驅動函數來綁定,並且通過id來找到它<script type = "text/javascript
  • 原生JavaScript的DOM操作匯總
    本文便總結一下常見的JavaScript DOM操作方法,關於JavaScript DOM事件可以參考另一篇文章:DOM Level 2 Event與jQuery源碼:捕獲與冒泡什麼是DOM?外行看來前端工程師的工作就是改頁面(HTML、CSS),寫腳本(JavaScript)。當你意識到你不是在改HTML而是在操作DOM時,你就升級了! 那麼什麼是DOM?
  • JavaScript DOM 編程
    ><html>  <head>    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">    <title>Untitled Document</title>    <script type="text/JavaScript
  • 掌握如下方法,輕鬆在Html DOM中通過JavaScript查找Html元素
    所有的Html文件都是由根標記<html>開始的。通過JavaScript代碼,可以讓頁面上的按鈕產生事件,這樣按鈕就變的具有生動性,單擊按鈕可以做出反應。這4種操作的前提是要查找到操作的Html元素,以下使用JavaScript代碼快速通過id、標籤名、name和class查找到整個頁面中的Html元素。
  • javascript DOM和DOM操作的四種基本方法
    來源 | https://blog.csdn.net/IamChuancey/article/details/78306072在了解了javascript
  • JavaScript 經典實例收集整理
    作者:trigkit4https://segmentfault.com/a/1190000002559158跨瀏覽器事件跨瀏覽器添加事件//跨瀏覽器添加事件 function addEvent(obj,type,fn){ if(obj.addEventListener){
  • 原生JavaScript操作DOM
    這裡,.onclick是一個元素的屬性,也就是說你可以修改它,但是你不能用它再綁定其他的監聽函數-你只能把新的函數賦給它,覆蓋掉舊函數的引用。我們可以用更加強大的.addEventListener()方法來盡情地添加各種類型的各種事件的監聽器。
  • JavaScript是什麼
    javaScript的簡單介紹【javaScript是什麼?】javaScript----是一種面向對象的腳本語言。面向對象是一種編程思想,看不見摸不著,只能體會,用實際行動來證明。面向對象這種編程思想是對面向過程的思想的升華。
  • 七天學會javascript第一天javascript介紹
    前幾周寫了幾篇關於入門php的文章,反響還不錯,之前簡單的提到了JavaScript,這周小編重點介紹JavaScript讓大家可以在一周時間內掌握這門前端語言的基本用法。javascript介紹javascript數據類型javascript運算符javascript對象javascript
  • JavaScript性能優化小知識總結
    javascript理解的還不夠透徹異或是自己太笨,更多的是自己不擅於思考懶得思考以至於裡面說的一些精髓都沒有太深入的理解。因為在sIEve(內存洩露監測工具)中監測的結果是用removeChild無法有效地釋放dom節點  使用事件代理  任何可以冒泡的事件都不僅僅可以在事件目標上進行處理,目標的任何祖先節點上也能處理,使用這個知識就可以將事件處理程序附加到更高的地方負責多個目標的事件處理,同樣,對於內容動態增加並且子節點都需要相同的事件處理函數的情況,可以把事件註冊提到父節點上,這樣就不需要為每個子節點註冊事件監聽了
  • Python爬蟲基礎:常用HTML標籤和Javascript入門
    (1)在網頁中使用JavaScript代碼的方式可以在HTML標籤的事件屬性中直接添加JavaScript代碼。例如,把下面的代碼保存為index.html文件並使用瀏覽器打開,單擊按鈕「保存」,網頁會彈出提示「保存成功」。
  • 開發者必備的Javascript單元測試工具
    創建一個配置文件,配置文件名為jsTestDriver.conf,配置文件如下:  server: http://localhost:9876  load:  - src/*.js  - src-test/*.js  這裡指出了啟動位於9876的埠進行監聽,並且先加載src文件夾下的所有js文件夾,然後在加載src-test文件夾下的
  • JavaScript跨域方法實例詳解
    DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title> window.name test</title>    <script type="text/javascript">        window.name = "source
  • 淺析 JavaScript 中的事件委託
    ;</script>以上就是偵聽單個元素(尤其是按鈕)上事件的方式。如果需要監聽多個按鈕上的事件呢?另外在列表中的按鈕被添加或刪除後,你必須還要手動刪除或附加事件監聽器。有沒有更好的方法?幸運的是,如果我們使用「事件委託」模式的話,偵聽多個元素上的事件只需要一個事件偵聽器。
  • JavaScript 性能優化的小知識總結
    前言一直在學習 javascript,也有看過《犀利開發 Jquery 內核詳解與實踐》,對這本書的評價只有兩個字犀利,可能是對 javascript 理解的還不夠透徹異或是自己太笨,更多的是自己不擅於思考懶得思考以至於裡面說的一些精髓都沒有太深入的理解。
  • JavaScript 的性能優化:加載和執行
    本文詳細介紹了如何正確的加載和執行 JavaScript 代碼,從而提高其在瀏覽器中的性能。01-概覽無論當前 JavaScript 代碼是內嵌還是在外鏈文件中,頁面的下載和渲染都必須停下來等待腳本執行完成。JavaScript 執行過程耗時越久,瀏覽器等待響應用戶輸入的時間就越長。
  • 【總結】Javascript操作DOM常用API詳解
    我們簡單來介紹一下這幾種類型:Element類型Element提供了對元素標籤名,子節點和特性的訪問,我們常用HTML元素比如div,span,a等標籤就是element中的一種。代碼,但可以包含轉義後的html代碼。