亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

addEventListener - 事件與函數攝入

addEventListener - 事件與函數攝入

慕標琳琳 2023-08-18 17:02:33
在理解為什么以及何時應該將事件/函數作為事件偵聽器應該尋找的第二個參數時遇到一些困難。例如:document.addEventListener('submit', e => { }與document.addEventListener('submit',  function whateverName() { }
查看完整描述

2 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

我創建這個示例是為了幫助演示這些差異。這主要取決于您訪問this元素的方式。使用箭頭函數,您必須提供 ,event以便可以使用 訪問該元素e.target。使用標準函數時,您不需要事件,而是可以依賴于this引用綁定到EventListener.


true如果元素匹配,該示例將打印。使用箭頭函數,您會注意到結果是false因為this上下文中不存在。標準函數將返回,true因為this確實存在于上下文中。


箭頭功能完全相同。我只是展示這一點e并(e)代表同一件事。查看箭頭函數的文檔以了解更多信息。


document.getElementById("btn0").addEventListener('click', e => {

  console.log(e.target==this);

});


document.getElementById("btn1").addEventListener('click', (e) => {

  console.log(e.target==this);

});


document.getElementById("btn2").addEventListener('click', function() {

  // event is not passed

  console.log(this==this);

});


document.getElementById("btn3").addEventListener('click', function(e) {

  console.log(e.target==this);

});

<button id="btn0" type="button">Arrow Function 1</button>

<button id="btn1" type="button">Arrow Function 2</button>

<button id="btn2" type="button">Function 1</button>

<button id="btn3" type="button">Function 2</button>


查看完整回答
反對 回復 2023-08-18
?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

在你的第一個例子中

document.addEventListener('submit', e => {

}

您將事件傳遞給以箭頭函數的形式處理該事件的函數。這可以更明確地寫成這樣。

document.addEventListener('submit', (e) => {

}

如果要傳遞多個參數,則必須按照上面所示的方式使用括號。

箭頭函數將始終在全局 this 的上下文中執行,而不是在調用它的范圍內執行。

另一方面你的第二個例子

document.addEventListener('submit',  function() {

}

正在使用一個經典函數。這將始終在調用它的范圍內執行。

當您需要該信息(例如:到底單擊了什么以及對單擊事件的該元素的引用)或阻止默認行為時,您傾向于將事件傳遞給處理程序。您顯示的示例都是提交事件。默認情況下提交會重新加載頁面。這通常不是一個理想的行為,所以你傾向于這樣做

submitEventHandler(event){
  event.preventDefault();
}


查看完整回答
反對 回復 2023-08-18
  • 2 回答
  • 0 關注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號