我有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('');
});
}
答案 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