欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

學(xué)習(xí)JavaScript事件流和事件處理程序

 更新時間:2016年01月25日 11:39:17   作者:billyangg  
這篇文章主要為大家介紹了學(xué)習(xí)JavaScript事件流和事件處理程序的注意事項,感興趣的小伙伴們可以參考一下

本文全篇介紹了JavaScript事件流和事件處理程序,分享給大家供大家參考,具體內(nèi)容如下

一、事件流

事件流描述的是從頁面中接收事件的順序。IE的事件流是事件冒泡流,而Netscape Communicator的事件流是事件捕獲流。

二、事件冒泡

即事件開始時由最具體的元素接收,然后逐級向上傳播到較為不具體的節(jié)點。如:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
</head>
<body>
 <div>Click</div>
</body>
</html>

當(dāng)點擊了頁面中的div元素,那么這個click事件會按照如下順序傳播:

  • div元素
  • body元素
  • html元素
  • document對象

三、事件捕獲

事件捕獲的思想是最具體的節(jié)點應(yīng)該最后接收到事件。事件捕獲的用意在于事件到達(dá)目標(biāo)之前捕獲它。

當(dāng)點擊了頁面中的div元素,那么這個click事件則會按照如下順序傳播:

  • document對象
  • html標(biāo)簽
  • body標(biāo)簽
  • div標(biāo)簽

雖然規(guī)范要求事件應(yīng)該從document對象開始傳播,但瀏覽器一般都是從window對象開始捕獲事件的。因為老版本瀏覽器不支持,所以一般都使用事件冒泡。

四、DOM事件流

“DOM2級事件”規(guī)定的事件流包括三個階段:事件捕獲階段、處于目標(biāo)階段事件冒泡階段

在DOM事件流中,實際的目標(biāo)在捕獲階段不會接收事件。就是說在捕獲階段,事件從document到html再到body后就停止了。下一個階段是“處于目標(biāo)”階段,于是事件在div中發(fā)生,并在事件處理中被看成是冒泡階段的一部分。然后,冒泡階段發(fā)生。IE8及更早的版本不支持DOM事件流,瀏覽器在捕獲階段觸發(fā)事件對象上的事件,結(jié)果就是有兩個機(jī)會在目標(biāo)對象上面操作事件。

五、事件處理程序

事件就是用戶或瀏覽器自身執(zhí)行的某種動作;事件處理程序(或事件偵聽器)就是響應(yīng)某個事件的函數(shù)。事件處理程序的名字以“on”開頭,如onload、onclick等。

六、HTML事件處理程序

若要在按鈕被單擊時執(zhí)行一些js代碼,可以這樣編寫:

<div onclick="alert('Clicked')">Click</div>

注意:不能在其中使用未經(jīng)轉(zhuǎn)義的HTML語法字符。

也可以調(diào)用在頁面中其他地方定義的腳本:

<script>
 function showMessage () {
  document.write("fdas");
 }
</script>
<input type="button" value="Click Me" onclick="showMessage()" />

事件處理程序中的代碼在執(zhí)行時,有權(quán)訪問全局作用域中的任何代碼。

這樣使用會創(chuàng)建一個封裝著的元素屬性值的函數(shù)。這個函數(shù)有一個局部變量event,也就是事件對象:

<input type="button" value="Click Me" onclick="alert(event.type)" />

其中,this值等于事件的目標(biāo)元素,如:

<input type="button" value="Click Me" onclick="alert(this.value)" />

HTML事件處理程序存在眾多問題,所以應(yīng)該使用js指定的事件處理程序

七、DOM0級事件處理程序

要使用js指定事件處理程序,首先必須取得一個要操作的對象的引用。

每個元素都有自己的事件處理程序?qū)傩裕@些屬性通常全部小寫,如onclick。如:

<input type="button" value="Click Me" id="btn" />
<script>
document.querySelector("#btn").onclick = function() {
 console.log("hello");
}
</script>

使用DOM0級方法指定的事件處理程序被認(rèn)為是元素的方法。因此,這時候的事件處理程序是在元素的作用域中運(yùn)行的;也就是this引用當(dāng)前元素:

<input type="button" value="Click Me" id="btn" />
<script>
document.querySelector("#btn").onclick = function() {
 console.log(this.type);
}
</script>

以上述這種方式添加的事件處理程序會在事件流的冒泡階段被處理。

刪除通過DOM0級方法指定的事件處理程序:

btn.onclick = null;

八、DOM2級事件處理程序

addEventListener()

該方法接收三個參數(shù):要處理的事件名、事件處理程序函數(shù)和布爾值;布爾值如果是true,表示在捕獲階段調(diào)用事件處理程序;如果是false,表示在冒泡階段調(diào)用事件處理程序。如:

var btn = document.getElementById("btn");
btn.addEventListener("click", function () {
 console.log(this.id);
})

還可以為該按鈕添加多個事件處理程序,如:

var btn = document.getElementById("btn");
btn.addEventListener("click", function () {
  console.log(this.id);
})
btn.addEventListener("click", function () {
  console.log(this.value);
})


removeEventListener()

var btn = document.getElementById("btn");
function info () {
  console.log(this.value);
}
btn.addEventListener("click", info);
btn.addEventListener("click", function () {
  console.log(this.id);
});
btn.addEventListener("click", function valueAndId () {
  console.log(this.value + " " + this.id);
});
btn.removeEventListener("click", info); //有效
btn.removeEventListener("click", function () {
  console.log(this.id);
}); //無效
btn.removeEventListener("click", valueAndId); //報錯無效

大多數(shù)情況下,都是將事件處理程序添加到事件流的冒泡階段,這樣就可以最大限度地兼容各種瀏覽器。

以上就是關(guān)于JavaScript事件流和事件處理程序的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • JS實現(xiàn)盒子跟著鼠標(biāo)移動及鍵盤方向鍵控制盒子移動效果示例

    JS實現(xiàn)盒子跟著鼠標(biāo)移動及鍵盤方向鍵控制盒子移動效果示例

    這篇文章主要介紹了JS實現(xiàn)盒子跟著鼠標(biāo)移動及鍵盤方向鍵控制盒子移動效果,涉及javascript事件響應(yīng)及頁面元素屬性動態(tài)操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2019-01-01
  • JS讀取XML文件示例代碼

    JS讀取XML文件示例代碼

    讀取XML文件的方法有很多,在本文為大家詳細(xì)介紹下使用js是如何做到的,感興趣的朋友可以參考下本文
    2013-11-11
  • 原生JS實現(xiàn)目錄滾動特效

    原生JS實現(xiàn)目錄滾動特效

    這篇文章主要為大家詳細(xì)介紹了原生JS實現(xiàn)目錄滾動特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • JS動畫效果打開、關(guān)閉層的實現(xiàn)方法

    JS動畫效果打開、關(guān)閉層的實現(xiàn)方法

    這篇文章主要介紹了JS動畫效果打開、關(guān)閉層的實現(xiàn)方法,可實現(xiàn)js控制層從中心位置打開與關(guān)閉的功能,涉及javascript操作頁面元素的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • JS技巧Canvas性能優(yōu)化臟矩形渲染實例詳解

    JS技巧Canvas性能優(yōu)化臟矩形渲染實例詳解

    這篇文章主要為大家介紹了JS技巧Canvas?性能優(yōu)化臟矩形渲染實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 文本框input聚焦失焦樣式實現(xiàn)代碼

    文本框input聚焦失焦樣式實現(xiàn)代碼

    文本框input聚焦失焦樣式實現(xiàn)代碼,需要的朋友可以參考下
    2012-10-10
  • uniapp與webview之間的相互傳值的實現(xiàn)

    uniapp與webview之間的相互傳值的實現(xiàn)

    這篇文章主要介紹了uniapp與webview之間的相互傳值的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • JavaScript實現(xiàn)簡單省市聯(lián)動

    JavaScript實現(xiàn)簡單省市聯(lián)動

    這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)簡單省市聯(lián)動,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 兩種簡單的跨域方法(jsonp、php)

    兩種簡單的跨域方法(jsonp、php)

    這篇文章主要為大家詳細(xì)介紹了兩種簡單的跨域方法,使用jsonp和php實現(xiàn)跨域,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • json字符串對象轉(zhuǎn)換代碼實例

    json字符串對象轉(zhuǎn)換代碼實例

    這篇文章主要介紹了json字符串對象轉(zhuǎn)換代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09

最新評論