在我获取一个输入元素标记数组之后,我尝试遍历它们,为每一个添加 onkeypress 事件监听器。
我的代码:
window.onload = function()
{
// Add the event listeners to input tags
// Get the array of input tags
var inputTags = document.getElementsByClassName('validateInput');
console.log(inputTags);
// Loop through them, adding the onkeypress event listener to each one
for (var i = 0; i < inputTags.lenght; i++)
{
var tag = inputTags[i];
var functionToAdd = function(event, tag)
{
isNumberOrDot(event, tag);
};
tag.addEventListener('keypress', functionToAdd, false);
}
};
问题:
为什么tag.addEventListener('keypress', functionToAdd, false);
没有添加onkeypress事件监听器?
答案 0 :(得分:2)
.length
拼写错误:for (var i = 0; i < inputTags.length; i++) {}
答案 1 :(得分:2)
您的代码中遇到了3个问题。首先不要在循环内部创建函数,第二个是闭包问题(你将始终只获得i
个值),第三个是你在length
属性中输错,修正后的代码应该是
window.onload = function()
{
// Add the event listeners to input tags
// Get the array of input tags
var inputTags = document.getElementsByClassName('validateInput');
console.log(inputTags);
// Loop through them, adding the onkeypress event listener to each one
var functionToAdd = function(event, tag)
{
isNumberOrDot(event, tag);
};
for (var i = 0; i < inputTags.length; i++)
{
(function( i ) {
inputTags[ i ].addEventListener('keypress', function( e ) {
functionToAdd( e, inputTags[i] )
}, false);
})( i );
}
};