0

我在一个多级数组(对象?)中有两条数据,我在一个带有 2 个 for 循环的回调函数集中引用它们。但是,我不知道如何将当前循环值放入回调:它使用所有回调的最后一个值。

for (k in myobj.myarr) {
    for (m in myobj.myarr[k]){
        document.addEventListener(
            k,
            function(event){
                myobj.myfn(event, myobj['myarr'][k][m][0], myobj['myarr'][k][m][1]);
            },
            true
        );
    }
}

myobj['myarr'][k][m][0]字符串在哪里,myobj['myarr'][k][m][1]函数在哪里。我console.log在函数中有一个,并且总是调用相同的函数(最后一个)。

是的,这可能是一个奇怪的实现,不,我不能使用库。如何从数组中获取正确的值以传递给回调函数?

4

2 回答 2

3

你真正想要的是 m 绑定到只有一个听众知道的上下文。为清楚起见,您可以定义如下函数:

function doEvent(k, myobj, m) {
  document.addEventListener(
    k,
    function(event){
      myobj.myfn(event, myobj['myarr'][k][m][0], myobj['myarr'][k][m][1]);
    },
    true
  );
}

...并为数组中的每个对象调用它:

for (k in myobj.myarr) {
  for (m in myobj.myarr[k]){
      doEvent(k, myobj, m);  
  }
}

现在,这些事件将特定m于循环中它们各自的 s。

于 2012-10-26T15:04:42.910 回答
1

您可以像这样“锁定”迭代器的值:

for( k in myobj.myarr) {
    for( m in myobj.myarr[k]) {
        (function(m,k) {
            // code that depends on m and k here
        })(m,k);
    }
}

不过,我不得不问,您似乎正在创建大量的事件侦听器,这对性能不利。有没有办法将事件处理程序委托给父元素并用于event.target查找实际元素?

于 2012-10-26T15:03:02.447 回答