最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解在JS中通過(guò)四種設(shè)置事件處理程序的方法

 更新時(shí)間:2017年03月02日 09:38:47   作者:菜鳥葫蘆娃  
所有的JavaScript事件處理程序的作用域是在其定義時(shí)的作用域而非調(diào)用時(shí)的作用域中執(zhí)行,并且它們能存取那個(gè)作用域中的任何一個(gè)本地變量。但是HTML標(biāo)簽屬性注冊(cè)處理程序就是一個(gè)例外。看下面四種方式

所有的JavaScript事件處理程序的作用域是在其定義時(shí)的作用域而非調(diào)用時(shí)的作用域中執(zhí)行,并且它們能存取那個(gè)作用域中的任何一個(gè)本地變量。但是HTML標(biāo)簽屬性注冊(cè)處理程序就是一個(gè)例外。看下面四種方式:

第一種方式(HTML標(biāo)簽屬性):

<input type="button" id="btn1" value="測(cè)試" onclick="alert(this.id);" />

上面的代碼是通過(guò)設(shè)置HTML標(biāo)簽屬性為給button 添加了點(diǎn)擊事件,當(dāng)點(diǎn)擊button 按鈕時(shí)會(huì)彈出這個(gè)button的id,即btn1。

這種通過(guò)HTML屬性來(lái)注冊(cè)事件處理程序是一個(gè)例外。它們被轉(zhuǎn)換為能存取全局變量的頂級(jí)函數(shù)而非任何本地變量。由于歷史的原因,它們運(yùn)行在一個(gè)修改后的作用域鏈中。通過(guò)HTML屬性定義的事件處理程序能像本地變量一樣使用目標(biāo)對(duì)象、容器對(duì)象(form)對(duì)象和document對(duì)象的屬性。它會(huì)被瀏覽器轉(zhuǎn)換為類似如下的代碼:

 function (event){
  with(document){
   with(this.form||{}){
    with(this){
     /*具體的事件處理代碼*/
    }
   }
  }  
}

關(guān)于with的用法,可以自行查閱,這里后面有文章講解。讀者先自行了解一下。提供一個(gè)連接(https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/with

這種方式現(xiàn)在已經(jīng)不推薦使用。

第二種方式(調(diào)用函數(shù))

<input type="button" id="btn2" value="測(cè)試" onclick="test()" />
<script type="text/javascript">
  function test(){
   alert(this.id);
  }
</script>

這段代碼彈出來(lái)的是undefined。

這種設(shè)置方式是通過(guò)調(diào)用全局函數(shù)來(lái)進(jìn)行的,這時(shí)this指向的是window,而非這個(gè)button的調(diào)用者,可以通過(guò)輸出console.log(this==window);來(lái)進(jìn)行驗(yàn)證

第三種方式(調(diào)用函數(shù))

<input type="button" id="btn3" value="測(cè)試" />
<script type="text/javascript">
   var btn3 = document.getElementById("btn3");
        btn3.onclick = function () {
          alert(this.id);
        };
</script>

這段代碼彈出來(lái)的是btn3。

這種事件處理程序在事件目標(biāo)上定義,所以它們作為這個(gè)對(duì)象的方法來(lái)調(diào)用(但是下面在IE里面有個(gè)例外)。這就是說(shuō)在事件處理程序內(nèi),this關(guān)鍵字指的是事件目標(biāo)。

當(dāng)使用addEventListener()注冊(cè)時(shí),調(diào)用的處理程序使用事件目標(biāo)作為它們的this值。但是對(duì)于還用attachment()注冊(cè)的處理程序作為函數(shù)調(diào)用,它們的this值是全局(window)對(duì)象。就是說(shuō)的第四中方式

第四種方式(通過(guò)addEventListener和attachment):

<input type="button" id="btn3" value="測(cè)試" onclick="test()" />
 var btn = document.getElementById("btn3");
        var handler = function () { console.log(this.id); };
        if (btn.addEventListener) {
          console.log("addEventListener");
          btn.addEventListener("click", handler, false);
        }
        else if (btn.attachEvent) {//IE9之前的版本
          console.log("attachEvent");
          btn.attachEvent("onclick",handler);
        }

在IE5-IE8 版本輸出的是undefined。(此時(shí)調(diào)用的是attachement)

IE9以后的版本輸出的btn3.(修復(fù)了上面的問(wèn)題,增加了通用的addEventListener)。

如果想修復(fù)IE5-8里面的那個(gè)問(wèn)題,可以使用下面的方法。

/*
*target:目標(biāo)對(duì)象,button之類的
*type:"click"字符串事件名稱,無(wú)需帶on
*handler:調(diào)用的處理程序
*/
function addEvent(target,type,handler){
 if (target.addEventListener) {
          target.addEventListener(type, handler, false);
        }
        else if (target.attachEvent) {//IE9之前的版本          
          btn.attachEvent("on"+type,function(event){
            return hanlder.call(target,event);//把處理程序作為事件目標(biāo)的方法調(diào)用,更改this指向。
          });
        }
}

以上所述是小編給大家介紹的在JS中通過(guò)四種設(shè)置事件處理程序的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 15個(gè)用于開發(fā)的TypeScript高級(jí)技巧分享

    15個(gè)用于開發(fā)的TypeScript高級(jí)技巧分享

    這篇文章主要來(lái)和大家分享一下15個(gè)用于開發(fā)的TypeScript高級(jí)技巧,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-07-07
  • JavaScript實(shí)現(xiàn)下拉菜單的顯示和隱藏

    JavaScript實(shí)現(xiàn)下拉菜單的顯示和隱藏

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)下拉菜單的顯示和隱藏的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-01-01
  • JS運(yùn)動(dòng)改變單物體透明度的方法分析

    JS運(yùn)動(dòng)改變單物體透明度的方法分析

    這篇文章主要介紹了JS運(yùn)動(dòng)改變單物體透明度的方法,結(jié)合實(shí)例形式分析了頁(yè)面元素屬性動(dòng)態(tài)修改相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • JavaScript數(shù)組基于交換的排序示例【冒泡排序】

    JavaScript數(shù)組基于交換的排序示例【冒泡排序】

    這篇文章主要介紹了JavaScript數(shù)組基于交換的排序,結(jié)合實(shí)例形式分析了JavaScript排序算法中的冒泡排序簡(jiǎn)單實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-07-07
  • 8個(gè)開發(fā)者必須知道的JavaScript深層概念(推薦)

    8個(gè)開發(fā)者必須知道的JavaScript深層概念(推薦)

    JavaScript有一個(gè)名為“調(diào)用堆?!保–all Stack)的簡(jiǎn)單列表,它逐一管理任務(wù)(堆棧算法),但是當(dāng)異步任務(wù)被傳遞時(shí),JavaScript會(huì)把它彈出到web API,瀏覽器就會(huì)處理它,這篇文章主要介紹了8個(gè)開發(fā)者必須知道的JavaScript深層概念,需要的朋友可以參考下
    2022-10-10
  • javascript實(shí)現(xiàn)限制上傳文件大小

    javascript實(shí)現(xiàn)限制上傳文件大小

    這篇文章主要介紹了javascript實(shí)現(xiàn)限制上傳文件大小的方法和示例,需要的朋友可以參考下
    2015-02-02
  • JS中input表單隱藏域及其使用方法

    JS中input表單隱藏域及其使用方法

    這篇文章主要介紹了JS中input表單隱藏域及其使用方法講解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-02-02
  • 微信小程序和公眾號(hào)實(shí)現(xiàn)簽到頁(yè)面

    微信小程序和公眾號(hào)實(shí)現(xiàn)簽到頁(yè)面

    這篇文章主要為大家詳細(xì)介紹了微信小程序和公眾號(hào)實(shí)現(xiàn)簽到頁(yè)面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 利用JS實(shí)現(xiàn)簡(jiǎn)單的瀑布流加載圖片效果

    利用JS實(shí)現(xiàn)簡(jiǎn)單的瀑布流加載圖片效果

    今天學(xué)習(xí)了一個(gè)瀑布流加載效果,很多網(wǎng)站都有瀑布流效果,下面通過(guò)本文給大家分享利用JS實(shí)現(xiàn)簡(jiǎn)單的瀑布流加載圖片效果,需要的朋友參考下吧
    2017-04-04
  • JavaScript數(shù)組的一些奇葩行為

    JavaScript數(shù)組的一些奇葩行為

    今天,復(fù)習(xí)了一下JavaScript的數(shù)組,然后,把他的一些奇葩行為總結(jié)了一下,分享在腳本之家平臺(tái),歡迎大家參考
    2016-01-01

最新評(píng)論

长寿区| 清原| 晋中市| 康定县| 通海县| 四会市| 德钦县| 宜川县| 监利县| 日照市| 宿州市| 西平县| 定州市| 营山县| 林口县| 太白县| 南昌市| 六枝特区| 康定县| 奉贤区| 封开县| 明星| 海南省| 娱乐| 高唐县| 昌江| 庄河市| 黄石市| 清远市| 吕梁市| 同江市| 嘉荫县| 绥化市| 宿松县| 南昌县| 泰和县| 天门市| 工布江达县| 前郭尔| 中西区| 平顺县|