最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

html - live validation with javascript - onchange only triggered once - Stack Overflow

programmeradmin7浏览0评论

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

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

Share Improve this question edited Nov 12, 2011 at 14:05 deemel asked Nov 12, 2011 at 13:49 deemeldeemel 1,0365 gold badges17 silver badges35 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 7

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

http://jsfiddle/wzvvN/1

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

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

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>

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

Also, your function is currently paring strings. Use parseInt to convert to an integer and then pare. 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>
发布评论

评论列表(0)

  1. 暂无评论