使用属性名为

时间:2016-06-06 10:19:10

标签: jquery html addeventlistener keyup

我在做应用程序,我遇到“addEventListener”和“keyup”的问题。 所以,我有这个HTML代码:

<input class="width50" type="number" name="metraz" value="<?php echo $metraz; ?>" />

和JS代码:

document.getElementsByName("metraz")[0].addEventListener("keyup",validate_numb("metraz"));

如果我用html编写“onkeyup =”validate_numb('nameoffield')“ - 会没问题,但是如果我尝试之前粘贴的代码 - 那么就不行了。任何人都有我有错误的消息?

EDIT。 这就是所有的代码(因为函数validate_numb在我用于循环和数组时调用了document.getElementsByName(name)[0] .value - undefined,所以这里没有用的东西)

   var items = [
        "metraz",
        "cena_dodatkowa_ogrzewanie"
    ];
    for(i=0; i<items.length; i++){
        console.log(items[i]);
       document.getElementsByName(items[i])[0].addEventListener("keyup", function(){
       validate_numb(items[i]) 
        }); 
    }
    

    function validate_numb(name){//argumentem jest nazwa pola
        var input = document.getElementsByName(name)[0].value;
        var parsed_input = parseInt(input);//wartosc pola zamieniana na liczbe całkowitą
        if(isNaN(parsed_input) || parsed_input<0 || input!=parsed_input){
            document.getElementsByName(name)[0].value="";
            return false;
        }else{
            return true;
        }
    }

2 个答案:

答案 0 :(得分:1)

dialog("open")的第二个参数需要是一个函数。

您正在立即致电addEventListener 并传递其返回值(可能不是函数)。

快速而肮脏的解决方案是:

validate_numb

更好的解决方案是重写函数,以便根本不需要...addEventListener("keyup",function () { validate_numb("metraz") });

name

答案 1 :(得分:0)

您需要插入回调函数,而不是表达式。

在JS中,当您添加侦听器或定义将来的事件时,您应该提供对事件发生时将使用的函数的引用。如果您立即调用该函数并将结果保存在侦听器中,则下次事件发生时您将无法执行该操作。

变化:

document.getElementsByName("metraz")[0].addEventListener("keyup",validate_numb("metraz"));

要:

document.getElementsByName("metraz")[0].addEventListener("keyup", function(event) {
    validate_numb("metraz")
});
相关问题