在for循环中使用两个数组

时间:2015-11-30 04:14:05

标签: javascript jquery arrays

我有2个阵列。两者都是文本字段。我想在textField1上触发keyup时使textfield2清零。如何在keyup函数中使用这两个数组?

var showItem=['orange', 'beans', 'rose'];
var typeItem=['fruit', 'veggie', 'flower'];

我尝试使用for循环,但无法按预期工作。

for (i = 0; i < showItem.length; i++) {
    $('#' + showItem[i]).keyup(function () {
        console.log(typeItem[i]);
        $('#' + typeItem[i]).text('');
    });
}

2 个答案:

答案 0 :(得分:2)

<强>问题:

触发事件时i的值为4,并且两个数组中的第四个索引都没有项,因此$('#'+typeItem[i]).text('');将不起作用。

<强>解决方案:

代码可以包装在IIFE中,i可以传递给它,因此它将被缓存为每个元素。但是,有一个更好的解决方案。

使用Array#indexOf获取所点击元素的索引。

var showItem = ['orange', 'beans', 'rose'];
var typeItem = ['fruit', 'veggie', 'flower'];

var selector = '#' + showItem.join(', #'); // '#orange, #beans, #rose'

$(selector).keyup(function () {
    // Get index of the id of the clicked element from array
    var index = showItem.indexOf($(this).attr('id'));

    // Get the element at index from second array and set the innerText to empty string
    $('#' + typeItem[index]).text('');
});

答案 1 :(得分:1)

问题是所有的回调都引用了一个变量buttons = {} for j in range(10): buttons[j] = Button(...) ,它在迭代数组时会随着时间而变化。

您可以优雅地使用Array.prototype.forEach作为为每个回调创建单独闭包的借口,而不是使用for循环进行迭代。然后每个内部函数都会引用它自己的i值,这个值实际上是常数。

i