live validation with javascript - onchange only triggered once

此生再无相见时 提交于 2020-01-23 07:39:49

问题


So I'm just testing something with js, basically the number in the first input has to be bigger than the number in the second input for the submit button to be activated.

The button get's disabled just right, but if I change the number it won't activate again

<!DOCTYPE HTML>
<html>
<body>
<input type='number' id='first' onchange="validateNumber()"/><br>
<input type='number' id='second' onchange="validateNumber()"/><br>
<script type="text/javascript" >
function validateNumber()
{
var first = document.getElementById('first').value;
var second = document.getElementById('second').value;

if(first > second){
document.getElementById('sub').disabled=false;
}else{
document.getElementById('sub').disabled=true;   
}


}
</script>
<input type="submit" id="sub"/>
</body>
</html>

Edit: The arrows of the number input trigger onchange it seems, that caused the problem


回答1:


You have to add the onclick and onkeyup event in order to respond to mouse interactions and to inserts from the clipboard:

http://jsfiddle.net/wzvvN/1

<input type='number' id='first' onkeyup="validateNumber()" onclick="validateNumber()" onchange="validateNumber()" />

<input type='number' id='second' onkeyup="validateNumber()" onclick="validateNumber()" onchange="validateNumber()" />



回答2:


Try binding the onfocus and onblur events to.

<input type='number' id='first' onchange="validateNumber()" onfocus="validateNumber()" onblur="validateNumber()"/><br>
<input type='number' id='second' onchange="validateNumber()" onfocus="validateNumber()" onblur="validateNumber()"/><br>



回答3:


You may want to use onkeyup(), since onchange() gets called only when you switch focus to another element.

Also, your function is currently comparing strings. Use parseInt to convert to an integer and then compare. The following code works for me:

<html>
<body>
<input type='number' id='first' onkeyup="validateNumber()"/><br>
<input type='number' id='second' onkeyup="validateNumber()"/><br>
<script type="text/javascript" >
function validateNumber()
{
  var first = parseInt(document.getElementById('first').value, 10);
  var second = parseInt(document.getElementById('second').value, 10);

  if(first > second){
    document.getElementById('sub').disabled=false;
  } else {
    document.getElementById('sub').disabled=true;   
  }
}
</script>
<input type="submit" id="sub" disabled="disabled" />
</body>
</html>


来源:https://stackoverflow.com/questions/8104834/live-validation-with-javascript-onchange-only-triggered-once

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!