如何将onkeypress事件侦听器添加到输入标记

时间:2014-01-30 21:06:16

标签: javascript dom

在我获取一个输入元素标记数组之后,我尝试遍历它们,为每一个添加 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事件监听器?

2 个答案:

答案 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 );
    }
};