我在做应用程序,我遇到“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;
}
}
答案 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")
});