在具有属性名称的输入上使用 keyup
Using keyup on input with attribute name
我正在做申请,但 "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')" - 会很好,但如果我尝试我之前粘贴的代码 - 那么就不是正在工作。有人对我的错误提出建议吗?
编辑。
这就是所有代码(这里有些东西不起作用,因为函数 validate_numb 调用我 document.getElementsByName(name)[0].value - 在我使用 for 循环和数组后未定义)
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;
}
}
addEventListener
的第二个参数需要是一个函数。
您正在立即调用 validate_numb
并传递其 return 值(这可能不是函数)。
对此的快速而肮脏的解决方案是:
...addEventListener("keyup",function () { validate_numb("metraz") });
更好的解决方案是重写函数,这样就根本不需要 name
。
function validate_numb(event) {
var element_to_test = this;
// etc etc
}
...addEventListener("keyup", validate_numb);
您需要插入回调函数,而不是表达式。
在 JS 中,当您添加侦听器或定义未来事件时,您应该提供对事件发生时将使用的函数的引用。如果立即调用该函数并将结果保存在监听器中,下次事件发生时您将无所事事。
变化:
document.getElementsByName("metraz")[0].addEventListener("keyup",validate_numb("metraz"));
收件人:
document.getElementsByName("metraz")[0].addEventListener("keyup", function(event) {
validate_numb("metraz")
});
我正在做申请,但 "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')" - 会很好,但如果我尝试我之前粘贴的代码 - 那么就不是正在工作。有人对我的错误提出建议吗?
编辑。 这就是所有代码(这里有些东西不起作用,因为函数 validate_numb 调用我 document.getElementsByName(name)[0].value - 在我使用 for 循环和数组后未定义)
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;
}
}
addEventListener
的第二个参数需要是一个函数。
您正在立即调用 validate_numb
并传递其 return 值(这可能不是函数)。
对此的快速而肮脏的解决方案是:
...addEventListener("keyup",function () { validate_numb("metraz") });
更好的解决方案是重写函数,这样就根本不需要 name
。
function validate_numb(event) {
var element_to_test = this;
// etc etc
}
...addEventListener("keyup", validate_numb);
您需要插入回调函数,而不是表达式。
在 JS 中,当您添加侦听器或定义未来事件时,您应该提供对事件发生时将使用的函数的引用。如果立即调用该函数并将结果保存在监听器中,下次事件发生时您将无所事事。
变化:
document.getElementsByName("metraz")[0].addEventListener("keyup",validate_numb("metraz"));
收件人:
document.getElementsByName("metraz")[0].addEventListener("keyup", function(event) {
validate_numb("metraz")
});