国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

事件處理程序中event參數(shù)的傳遞

Code4App / 1667人閱讀

摘要:在和級(jí)事件處理程序中,瀏覽器都會(huì)將一個(gè)對(duì)象傳入到事件處理程序中,這種用指定的事件處理程序的形參當(dāng)然可以隨便命名了,一般簡(jiǎn)寫(xiě)為了。其實(shí)還可以將事件處理函數(shù)定義為無(wú)參函數(shù),可以用來(lái)獲取事件對(duì)象。

問(wèn)題

今天突然要維護(hù)一個(gè)老古董的項(xiàng)目,里面大部分都是原生js和jquery,用vue之類(lèi)多了,這些都有些生疏... 代碼中有一個(gè)HTML事件處理程序,

function clickHandler(e) {
  console.log(e.target);
}

剛開(kāi)始都沒(méi)注意有啥錯(cuò),然后在函數(shù)中e.target等都會(huì)報(bào)錯(cuò):ReferenceError: e is not defined

很明顯,傳入的事件對(duì)象參數(shù)是錯(cuò)誤的,在HTML事件處理程序的情況下正確的做法是傳入完整的event名稱(chēng),

其實(shí)event可以看作是window.event的簡(jiǎn)寫(xiě),用window對(duì)象的其他屬性試驗(yàn)下就可以發(fā)現(xiàn),比如用location, 那么函數(shù)中e.href即可打印出當(dāng)前鏈接。

function clickHandler(e) {
  console.log(e.href);
}
思考

其實(shí)上面本來(lái)不是個(gè)問(wèn)題,主要平時(shí)很少用行內(nèi)的HTML事件處理程序,所以隨手把參數(shù)event寫(xiě)錯(cuò)為了e。在DOM0和DOM2級(jí)事件處理程序中,瀏覽器都會(huì)將一個(gè)event對(duì)象傳入到事件處理程序中,這種用js指定的事件處理程序的形參當(dāng)然可以隨便命名了,一般簡(jiǎn)寫(xiě)為e了。

DOM0

仍然用上面的聲明函數(shù):

function clickHandler(e) {
  console.log(e.target);
}
document.getElementsByTagName("button")[0].onclick = clickHandler;

準(zhǔn)確的打印出了button元素。

其實(shí)還可以將事件處理函數(shù)定義為無(wú)參函數(shù),可以用arguments來(lái)獲取事件對(duì)象。

function clickHandler1() { //無(wú)參處理函數(shù)
  var e = arguments[0];
  console.log(e.target);
}
DOM2

最常用的就是dom2級(jí)事件處理程序了:

document.getElementsByTagName("button")[0].addEventListener("click", clickHandler, false );

同樣也可以使用無(wú)參函數(shù)

document.getElementsByTagName("button")[0].addEventListener("click", clickHandler1, false );
匿名函數(shù)時(shí)候需要注意的

DOM1和2級(jí)事件處理程序也常用匿名函數(shù)的方式:

document.getElementsByTagName("button")[0].onclick = (e) => {
  console.log(e.target);
}

這樣傳入event參數(shù)的有參匿名函數(shù)是沒(méi)有問(wèn)題的,但是如果用無(wú)參函數(shù)的話下面代碼就會(huì)報(bào)錯(cuò)出問(wèn)題:

document.getElementsByTagName("button")[0].onclick = () => {
  var e = arguments[0];
  console.log(e.target);
}

根據(jù)MDN上描述,arguments不能使用箭頭函數(shù),因?yàn)榧^函數(shù)沒(méi)有自己的this,使用的是封閉執(zhí)行作用域的this。
但是若非要使用arguments的話可以傳入...args:

document.getElementsByTagName("button")[0].onclick = (...args) => {
  var e = args[0];
  console.log(e.target);
}
事件處理程序傳遞多個(gè)參數(shù)

在最早的HTML事件處理程序中我們可以直接傳入多個(gè)參數(shù),

但是DOM0和2級(jí)事件處理程序默認(rèn)只傳入event參數(shù),可以采用閉包的方法(IIFE)來(lái)處理:

document.getElementsByTagName("button")[0].addEventListener("click", (function(a, b) {
    return function(e) {clickHandler(e, a, b); };
}) ("a", "b"), false);
event.targetevent.currentTarget

既然都寫(xiě)了事件處理程序順便再?gòu)?fù)習(xí)下這兩個(gè)的區(qū)別,target是事件的實(shí)際目標(biāo),currentTarget是處理事件的元素,也就是綁定事件函數(shù)的元素,事件處理函數(shù)中this的值等于currentTarget

在線演示

在線demo

參考資料

js高級(jí)程序設(shè)計(jì)(第三版)

Javascript event handler with parameters

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/98853.html

相關(guān)文章

  • jQuery 事件(三) 事件綁定和解綁、對(duì)象使用、自定義事件

    摘要:事件的綁定和解綁的多事件綁定之前學(xué)的鼠標(biāo)事件,表單事件與鍵盤(pán)事件都有個(gè)特點(diǎn),就是直接給元素綁定一個(gè)處理函數(shù),所有這類(lèi)事件都是屬于快捷處理。由于瀏覽器事件冒泡特性,可以在觸發(fā)時(shí)把這個(gè)事件往上冒泡到上,因?yàn)樯辖壎ㄊ录憫?yīng),所以能觸發(fā)這個(gè)動(dòng)作。 事件的綁定和解綁 on()的多事件綁定 之前學(xué)的鼠標(biāo)事件,表單事件與鍵盤(pán)事件都有個(gè)特點(diǎn),就是直接給元素綁定一個(gè)處理函數(shù),所有這類(lèi)事件都是屬于快捷處理...

    niuxiaowei111 評(píng)論0 收藏0
  • JQuery基礎(chǔ)修煉-事件

    摘要:目錄第章事件介紹第章鼠標(biāo)事件第章表單事件第章鍵盤(pán)事件第章事件的綁定和解綁第章事件對(duì)象的使用第章自定義事件與事件用交互操作中,最簡(jiǎn)單直接就是點(diǎn)擊操作。提供了兩個(gè)方法一個(gè)是方法用于監(jiān)聽(tīng)用戶單擊操作,另一個(gè)方法是方法用于監(jiān)聽(tīng)用戶雙擊操作。 目錄 第1章 事件介紹 第2章 鼠標(biāo)事件 第3章 表單事件 第4章 鍵盤(pán)事件 第5章 事件的綁定和解綁 第6章 事件對(duì)象的使用 第7章 自定義事件 cli...

    yy13818512006 評(píng)論0 收藏0
  • JQuery基礎(chǔ)修煉-事件

    摘要:目錄第章事件介紹第章鼠標(biāo)事件第章表單事件第章鍵盤(pán)事件第章事件的綁定和解綁第章事件對(duì)象的使用第章自定義事件與事件用交互操作中,最簡(jiǎn)單直接就是點(diǎn)擊操作。提供了兩個(gè)方法一個(gè)是方法用于監(jiān)聽(tīng)用戶單擊操作,另一個(gè)方法是方法用于監(jiān)聽(tīng)用戶雙擊操作。 目錄 第1章 事件介紹 第2章 鼠標(biāo)事件 第3章 表單事件 第4章 鍵盤(pán)事件 第5章 事件的綁定和解綁 第6章 事件對(duì)象的使用 第7章 自定義事件 cli...

    hikui 評(píng)論0 收藏0
  • 讀書(shū)筆記(05) - 事件 - JavaScript高級(jí)程序設(shè)計(jì)

    摘要:而事件分為個(gè)級(jí)別級(jí)事件處理程序,級(jí)事件處理程序和級(jí)事件處理程序。級(jí)中沒(méi)有規(guī)范事件的相關(guān)內(nèi)容,所以沒(méi)有級(jí)事件處理。 showImg(https://segmentfault.com/img/bVburYR?w=499&h=400); HTML依托于JavaScript來(lái)實(shí)現(xiàn)用戶與WEB網(wǎng)頁(yè)之間的動(dòng)態(tài)交互,接收用戶操作并做出相應(yīng)的反饋,而事件在此間則充當(dāng)橋梁的重要角色。 日常開(kāi)發(fā)中,經(jīng)常會(huì)...

    tinylcy 評(píng)論0 收藏0
  • DOM事件流與事件委托

    摘要:事件流與事件委托事件,即文檔或?yàn)g覽器中發(fā)生的一些特定交互的瞬間,我們可以利用事件監(jiān)聽(tīng)來(lái)預(yù)定事件,當(dāng)事件發(fā)生的時(shí)候執(zhí)行相應(yīng)的處理程序。本文主要討論事件流的三個(gè)階段,及利用事件委托機(jī)制進(jìn)行性能優(yōu)化。 事件流與事件委托 事件,即文檔或?yàn)g覽器中發(fā)生的一些特定交互的瞬間,我們可以利用事件監(jiān)聽(tīng)來(lái)預(yù)定事件,當(dāng)事件發(fā)生的時(shí)候執(zhí)行相應(yīng)的處理程序。當(dāng)事件發(fā)生在某個(gè)DOM節(jié)點(diǎn)上時(shí),事件在DOM結(jié)構(gòu)中進(jìn)行一級(jí)...

    chaos_G 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<