第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何將可移動事件偵聽器添加到元素列表,但仍將參數(shù)傳遞給它調(diào)用的函數(shù)?

如何將可移動事件偵聽器添加到元素列表,但仍將參數(shù)傳遞給它調(diào)用的函數(shù)?

拉丁的傳說 2022-06-09 16:14:34
我有一個存儲在名為 的變量中的元素列表elementList,并希望為每個元素添加一個事件偵聽器。所以我創(chuàng)建了以下循環(huán):for (i = 0; i < elementList.length; i++) {  elementList[i].addEventListener('click', myFunction, false);}問題?我需要i作為參數(shù)傳遞給myFunction. 在網(wǎng)上做了一些研究后,我找到了這個解決方案:for (i = 0; i < elementList.length; i++) {  elementList[i].addEventListener('click', (function(i){    return function(){      myFunction(i);    };  }(i)), false);}代碼運行良好——但仍然存在問題。稍后在我的代碼中,我需要再次刪除事件偵聽器,這是通過該removeEventListener()方法完成的,正如我在進行更多研究后發(fā)現(xiàn)的那樣。但是這個方法需要一個命名的外部函數(shù)——它不適用于匿名函數(shù)。所以它適用于我上面的第一個例子,但不適用于第二個例子。所以我的問題是:如何將事件偵聽器添加到元素列表中,這樣我就可以做這兩件事:將參數(shù)傳遞給我的函數(shù)再次移除事件監(jiān)聽器,稍后在代碼中謝謝你的幫助!
查看完整描述

2 回答

?
月關(guān)寶盒

TA貢獻1772條經(jīng)驗 獲得超5個贊

您可以生成函數(shù)列表并使用它們來刪除偵聽器:


let removers = elementList.map((el, idx) => {

  let handler = () => myFunction(idx);

  el.addEventListener('click', handler);

  return () => el.removeEventListener('click', handler);

});


// when you need

//

removers[4]();  // calls removeEventListener


查看完整回答
反對 回復(fù) 2022-06-09
?
PIPIONE

TA貢獻1829條經(jīng)驗 獲得超9個贊

要從按鈕中刪除事件偵聽器,您需要引用函數(shù)本身。所以在使用之前addEventListener將函數(shù)存儲在一個對象或一個數(shù)組中,或者你可以回顧并找到這個函數(shù)的地方。因為removeEventListener如果你不給它與你使用的完全相同的功能,它將無法工作addEventListener。


在下面的代碼片段中,我構(gòu)建了一個存儲這些事件偵聽器并將其稱為EventCollection. 此類用作容器并保存要添加的每個事件的列表。這樣,您可以隨時在代碼中添加或刪除所需的所有事件偵聽器,而無需做太多工作。


class EventCollection {


  /**

   * Create a list to store the entries in.

   */

  constructor() {

    this.entries = [];

    this.isListening = false;

  }


  /**

   * Add an entry to the collection to listen for on an event.

   */

  append(target, type, listener, options = false) {

    if (!(target instanceof EventTarget)) return;

    this.entries.push({ target, type, listener, options });

    return this;

  }


  /**

   * Listen for all the entries in the list.

   */

  listen() {

    if (!this.isListening) {

      this.entries.forEach(({ target, type, listener, options }) => {

        target.addEventListener(type, listener, options);

      });

      this.isListening = true;

    }

    return this;

  }


  /**

   * Stop listening for all the entries in the list.

   */

  stopListening() {

    this.entries.forEach(({ target, type, listener, options }) => {

      target.removeEventListener(type, listener, options);

    });

    this.isListening = false;

    return this;

  } 


}


// Create a new instance of an EventCollection

var eventCollection = new EventCollection();


var buttons = document.getElementsByTagName('button');


function myFunction(index) {

  alert(index);

}


// Add all the event listeners to the collection.

for (var i = 0; i < buttons.length; i++) {

  (function(i){

    eventCollection.append(buttons[i], 'click', function() {

      myFunction(i);

    }, false);

  }(i));

}


// Start listening.

eventCollection.listen();


// After 5 seconds, stop listening.

// The buttons won't work anymore.

setTimeout(function() {

  eventCollection.stopListening();

}, 5000);

<button>Button 1</button>

<button>Button 2</button>

<button>Button 3</button>


像這樣構(gòu)建集合。用new關(guān)鍵字。


// Create a new collection

var eventCollection = new EventCollection();

下一步是添加您要收聽的事件。它需要元素、事件類型和事件觸發(fā)時調(diào)用的函數(shù)。


eventCollection.append(element, 'click', function() {});

現(xiàn)在您的事件已在集合中并已存儲,但它們尚未偵聽事件。使用該.listen()方法循環(huán)遍歷集合中的所有事件并監(jiān)聽它們。


eventCollection.listen();

每當您想停止收聽集合中的事件時,請使用以下命令。


eventCollection.stopListening();


查看完整回答
反對 回復(fù) 2022-06-09
  • 2 回答
  • 0 關(guān)注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號