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

資訊專欄INFORMATION COLUMN

事件處理程序中event參數的傳遞

Code4App / 1676人閱讀

摘要:在和級事件處理程序中,瀏覽器都會將一個對象傳入到事件處理程序中,這種用指定的事件處理程序的形參當然可以隨便命名了,一般簡寫為了。其實還可以將事件處理函數定義為無參函數,可以用來獲取事件對象。

問題

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

</>復制代碼

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

剛開始都沒注意有啥錯,然后在函數中e.target等都會報錯:ReferenceError: e is not defined

很明顯,傳入的事件對象參數是錯誤的,在HTML事件處理程序的情況下正確的做法是傳入完整的event名稱,

其實event可以看作是window.event的簡寫,用window對象的其他屬性試驗下就可以發現,比如用location, 那么函數中e.href即可打印出當前鏈接。

</>復制代碼

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

其實上面本來不是個問題,主要平時很少用行內的HTML事件處理程序,所以隨手把參數event寫錯為了e。在DOM0和DOM2級事件處理程序中,瀏覽器都會將一個event對象傳入到事件處理程序中,這種用js指定的事件處理程序的形參當然可以隨便命名了,一般簡寫為e了。

DOM0

仍然用上面的聲明函數:

</>復制代碼

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

</>復制代碼

  1. document.getElementsByTagName("button")[0].onclick = clickHandler;

準確的打印出了button元素。

其實還可以將事件處理函數定義為無參函數,可以用arguments來獲取事件對象。

</>復制代碼

  1. function clickHandler1() { //無參處理函數
  2. var e = arguments[0];
  3. console.log(e.target);
  4. }
DOM2

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

</>復制代碼

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

同樣也可以使用無參函數

</>復制代碼

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

DOM1和2級事件處理程序也常用匿名函數的方式:

</>復制代碼

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

這樣傳入event參數的有參匿名函數是沒有問題的,但是如果用無參函數的話下面代碼就會報錯出問題:

</>復制代碼

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

根據MDN上描述,arguments不能使用箭頭函數,因為箭頭函數沒有自己的this,使用的是封閉執行作用域的this。
但是若非要使用arguments的話可以傳入...args:

</>復制代碼

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

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

但是DOM0和2級事件處理程序默認只傳入event參數,可以采用閉包的方法(IIFE)來處理:

</>復制代碼

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

既然都寫了事件處理程序順便再復習下這兩個的區別,target是事件的實際目標,currentTarget是處理事件的元素,也就是綁定事件函數的元素,事件處理函數中this的值等于currentTarget

在線演示

在線demo

參考資料

js高級程序設計(第三版)

Javascript event handler with parameters

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/98853.html

相關文章

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

    摘要:事件的綁定和解綁的多事件綁定之前學的鼠標事件,表單事件與鍵盤事件都有個特點,就是直接給元素綁定一個處理函數,所有這類事件都是屬于快捷處理。由于瀏覽器事件冒泡特性,可以在觸發時把這個事件往上冒泡到上,因為上綁定事件響應,所以能觸發這個動作。 事件的綁定和解綁 on()的多事件綁定 之前學的鼠標事件,表單事件與鍵盤事件都有個特點,就是直接給元素綁定一個處理函數,所有這類事件都是屬于快捷處理...

    niuxiaowei111 評論0 收藏0
  • JQuery基礎修煉-事件

    摘要:目錄第章事件介紹第章鼠標事件第章表單事件第章鍵盤事件第章事件的綁定和解綁第章事件對象的使用第章自定義事件與事件用交互操作中,最簡單直接就是點擊操作。提供了兩個方法一個是方法用于監聽用戶單擊操作,另一個方法是方法用于監聽用戶雙擊操作。 目錄 第1章 事件介紹 第2章 鼠標事件 第3章 表單事件 第4章 鍵盤事件 第5章 事件的綁定和解綁 第6章 事件對象的使用 第7章 自定義事件 cli...

    yy13818512006 評論0 收藏0
  • JQuery基礎修煉-事件

    摘要:目錄第章事件介紹第章鼠標事件第章表單事件第章鍵盤事件第章事件的綁定和解綁第章事件對象的使用第章自定義事件與事件用交互操作中,最簡單直接就是點擊操作。提供了兩個方法一個是方法用于監聽用戶單擊操作,另一個方法是方法用于監聽用戶雙擊操作。 目錄 第1章 事件介紹 第2章 鼠標事件 第3章 表單事件 第4章 鍵盤事件 第5章 事件的綁定和解綁 第6章 事件對象的使用 第7章 自定義事件 cli...

    hikui 評論0 收藏0
  • 讀書筆記(05) - 事件 - JavaScript高級程序設計

    摘要:而事件分為個級別級事件處理程序,級事件處理程序和級事件處理程序。級中沒有規范事件的相關內容,所以沒有級事件處理。 showImg(https://segmentfault.com/img/bVburYR?w=499&h=400); HTML依托于JavaScript來實現用戶與WEB網頁之間的動態交互,接收用戶操作并做出相應的反饋,而事件在此間則充當橋梁的重要角色。 日常開發中,經常會...

    tinylcy 評論0 收藏0
  • DOM事件流與事件委托

    摘要:事件流與事件委托事件,即文檔或瀏覽器中發生的一些特定交互的瞬間,我們可以利用事件監聽來預定事件,當事件發生的時候執行相應的處理程序。本文主要討論事件流的三個階段,及利用事件委托機制進行性能優化。 事件流與事件委托 事件,即文檔或瀏覽器中發生的一些特定交互的瞬間,我們可以利用事件監聽來預定事件,當事件發生的時候執行相應的處理程序。當事件發生在某個DOM節點上時,事件在DOM結構中進行一級...

    chaos_G 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<