簡體   English   中英

addEventListener的關閉位置在哪里?

[英]Where to put closure for addEventListener?

我讀到可以在循環中為addEventListener使用閉包( addEventListener使用for循環和傳遞值 )。

但是,此方法不適用於更復雜的示例:

function f(fevent) {
  var a = document.createElement('a');
  a.innerHTML = 'Test';
  a.href = '#';
  a.addEventListener('click', fevent);
  return a;
};

for (l = 0; l < 2; l += 1) {
  for (h = 0; h < 2; h += 1) {
    document.body.appendChild(
    f(function() {alert(l+','+h);})
    );
  }
}

https://jsfiddle.net/yasnujzq/

編輯:我想要的是錨點上的click事件,以警告不同的組合(0,0),(1,0),(0,1)和(1,1)。 但它始終會發出警報(2,2)。

這是我從上面嘗試的閉包方法:

function f(fevent) {
  var a = document.createElement('a');
  a.innerHTML = 'Test';
  a.href = '#';
  a.addEventListener('click', fevent);
  return a;
};

for (l = 0; l < 2; l += 1) {
  for (h = 0; h < 2; h += 1) {
    (function() {
                document.body.appendChild(
                f(function() {alert(l+','+h);})
                );
    }());
  }

https://jsfiddle.net/72sg8d5n/

我還嘗試向閉包添加參數:

function f(fevent) {
  var a = document.createElement('a');
  a.innerHTML = 'Test';
  a.href = '#';
  a.addEventListener('click', fevent);
  return a;
};

for (l = 0; l < 2; l += 1) {
  for (h = 0; h < 2; h += 1) {
    (function() {
                document.body.appendChild(
                f(function() {alert(l+','+h);})
                );
    }(l,h));
  }
}

https://jsfiddle.net/wxodr8p6/

也許有人可以啟發我。

編輯 :這是從下面的可接受的解決方案方法工作的小提琴:

https://jsfiddle.net/87zp4dkr/

 (function() { document.body.appendChild( f(function() {alert(l+','+h);}) ); }(l,h)); 

在此代碼的最后一行,您將向函數傳遞兩個參數。

在第一行,您不接受任何參數。

您無需使用傳遞給該函數的值,而仍使用循環中的值(每次循環時,這些值都會改變)。

(function(my_l, my_h) {
            document.body.appendChild(
            f(function() {alert(my_l+','+my_h);})
            );
}(l,h));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM