當我們在網頁上進行操作時,比如點擊按鈕、輸入文字、鼠標移動等,都會觸發事件,而javascript正是利用事件來實現與網頁的交互。本文將介紹javascript事件的基礎知識:事件類型、事件監聽、事件冒泡、事件捕獲和事件委托等。
事件類型
//給按鈕添加點擊事件 document.getElementById("myButton").addEventListener("click", function(){ alert("Hello World!"); });
其中,"click"就是事件類型,代表用戶點擊鼠標時觸發的事件。除了click,還有很多其他的事件類型,比如鼠標移動事件(mousemove)、鍵盤按鍵事件(keyup)、窗口大小變化事件(resize)等等。在javascript中,我們可以利用addEventListener()方法為某個元素添加監聽器,從而捕獲某種類型的事件。
事件監聽
//給元素添加mousemove事件監聽器 document.body.addEventListener("mousemove", function(event){ console.log("Mouse X: " + event.clientX + ", Mouse Y: " + event.clientY); });
事件監聽是指我們利用addEventListener()或者attachEvent()方法,來為某個元素添加一個監聽器,從而捕獲該元素上的事件。監聽器是一段javascript代碼,會在事件發生時自動執行。在上面的例子中,我們為
元素添加了一個mousemove事件監聽器,該監聽器可以獲取到鼠標當前的坐標,并輸出到控制臺。事件冒泡
//給元素添加點擊事件監聽器 document.getElementById("myDiv").addEventListener("click", function(){ console.log("Click myDiv"); }); //給元素添加點擊事件監聽器 document.querySelector("p").addEventListener("click", function(){ console.log("Click p"); }); //點擊
元素 //結果依次輸出:"Click p" 和 "Click myDiv"
事件冒泡是指當某個元素上的事件被觸發時,該事件會向父級元素一級一級地冒泡,直到被整個文檔(document)所捕獲。在上面的例子中,我們先給
元素添加一個點擊事件監聽器,再給其父級元素
添加一個點擊事件監聽器。當我們點擊元素時,該事件會先被
元素捕獲,再向上冒泡到
元素,所以輸出結果是先"Click p",再"Click myDiv"。事件捕獲
//給元素添加點擊事件監聽器 document.getElementById("myDiv").addEventListener("click", function(){ console.log("Click myDiv", "Event Phase: " + event.eventPhase); }, true); //給元素添加點擊事件監聽器 document.querySelector("p").addEventListener("click", function(){ console.log("Click p", "Event Phase: " + event.eventPhase); }, true); //點擊
元素 //結果依次輸出: // "Click myDiv Event Phase: 1" // "Click p Event Phase: 2" // "Click p Event Phase: 3" // "Click myDiv Event Phase: 3"
事件捕獲與事件冒泡相反,它是指當某個元素上的事件被觸發時,該事件會從整個文檔(document)開始向下捕獲到該元素,然后再冒泡回來。在上面的例子中,我們利用addEventListener()方法為
元素和元素分別添加一個點擊事件監聽器,并指定事件處理階段(第三個參數)。當我們點擊
元素時,先執行在捕獲階段注冊的
的監聽器,并輸出"Click myDiv Event Phase: 1";然后執行在捕獲階段注冊的的監聽器,并輸出"Click p Event Phase: 2";接著執行在冒泡階段注冊的
的監聽器,并輸出"Click p Event Phase: 3";最后執行在冒泡階段注冊的
的監聽器,并輸出"Click myDiv Event Phase: 3"。事件委托
//利用事件委托,為所有的元素添加點擊事件監聽器 document.querySelector("ul").addEventListener("click", function(event){ if(event.target.nodeName === "LI"){ console.log("Click: " + event.target.textContent); } }); 事件委托是指我們利用事件冒泡原理,在父級元素上注冊一個事件監聽器,從而代理其子元素的事件。在網頁中,我們常常需要為同一類型的元素(比如列表、按鈕等)添加同樣的事件監聽器,此時可以采用事件委托來避免重復代碼。在上面的例子中,我們利用事件委托為
元素添加了一個點擊事件監聽器,當點擊其中的某個
- 元素時,該事件會向上冒泡到
元素,并被該元素的事件監聽器捕獲,然后判斷點擊的元素是否是
- 元素,如果是,則輸出該元素的文本內容。
總結
本文介紹了javascript事件的基本知識,包括事件類型、事件監聽、事件冒泡、事件捕獲和事件委托。了解這些概念,有助于我們更好地理解javascript與網頁的交互機制。
上一篇ajax傳遞實體對象集合下一篇java簡述 和I的區別