我想为我的所有标签添加一个事件侦听器,每个标签在触发偶数时传递对自身的引用作为参数。这是我写的函数:
function validateDigitsFeature()
{
// Add the event listeners to input tags
// Get the array of input tags
var inputTags = document.getElementsByClassName('validateInput');
var tagId;
// Loop through them, adding the onkeypress event listener to each one
for (var i = 0; i < inputTags.length; i++)
{
// Give each input element an id
tagId = inputTags[i].id = 'input_id_' + i;
inputTags[i].addEventListener('keyup', function(){isNumberOrDot(event, tagId);}, false);
}
}
基本上,该函数应执行以下操作:
- 将所有具有指定类名的输入标签存储在一个数组中
- 循环遍历数组,为每个标签添加一个 id 并
- 添加
onkeyup
带有isNumberOrDot(event, tagId)
处理程序的事件侦听器。
问题
添加了 onkeyup 事件,但每个事件的处理程序总是引用tagId
数组最后一个元素的 。
问题
代码/逻辑有什么问题?以及如何修复?
笔记
当然,这个问题与循环中的 JavaScript 闭包有关,虽然这个问题可以有一个更一般的答案,但它特定于正在使用的事件侦听器。对于更高级的开发人员,可能很容易将通用解决方案应用于此问题。但对我来说,其他解决方案仍然没有提供完整的解释,甚至没有奏效。
先感谢您。