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

Javascript 如何将onkeypress事件侦听器添加到输入标记,javascript,dom,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(in

在获取一组输入元素标记后,我尝试在它们之间循环添加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);
    }
};
window.onload=function()
{
//将事件侦听器添加到输入标记
//获取输入标记的数组
var inputTags=document.getElementsByClassName('validateInput');
控制台日志(inputTags);
//循环遍历它们,将onkeypress事件监听器添加到每个监听器中
对于(变量i=0;i
问题:

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);
    }
};
为什么不标记.addEventListener('keypress',functionToAdd,false)未添加onkeypress事件侦听器?

。上面的长度拼写错误:
for(var i=0;i
您在代码中遇到了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 );
    }
};
window.onload=function()
{
//将事件侦听器添加到输入标记
//获取输入标记的数组
var inputTags=document.getElementsByClassName('validateInput');
控制台日志(inputTags);
//循环遍历它们,将onkeypress事件监听器添加到每个监听器中
var functionToAdd=函数(事件、标记)
{
isnumberrordot(事件、标记);
};
对于(变量i=0;i
我创建了一个包含您的更正的文档。它还不能工作。我只想让输入标记具有
onkeypress=“isnumberrordot(event,tag)”
属性。@sargas您的JSFIDLE
Uncaught ReferenceError中有一个错误:isnumberdot没有定义
,我看不到在哪里
isnumberrordot
函数定义了我添加到了上的其他函数,以便您可以测试它。谢谢你的时间。看这把小提琴:。问题是,
IsNumberRorDot
的工作原理与预期不符+没有
destroyElement
的功能,而且您可能需要使用
keyup
事件,而不是
keypress
谢谢您的解决方案,效果非常好。是的,“keyup”正是我在js脚本检查是否有效后删除无效字符所需要的。脚本不会删除已按下的字符(无效-不是点数),但尚未添加到
input.value
中。“keyup”允许脚本在
输入后运行。值用键入的字符更新。谢谢,这只是问题的一部分。一旦修复,解决方案就无法实现。检查我的电脑。