仅调用onkeyup函数一次

时间:2012-06-05 18:21:04

标签: javascript

我已经编写了一个示例HTML页面

<html>
<head>
<script>
function validate() {
alert(document.getElementById('newpass').value);
}
</script>
</head>

<body>
<input type="text" id="newpass" onkeyup="validate();" />
</body>
</html>

但是在我按退格键的情况下,该函数会被多次调用。 如何让它只执行一次?

我想要做的就是获取事件上输入框的当前值,当前onkeypress不提供当前值,而是前一个。 onkeyup给出了当前但多次执行。

2 个答案:

答案 0 :(得分:4)

听起来您想要在输入字段时获取输入字段的当前值,但是如果他们使用退格键则要忽略:

<html>
<head>
<script type="text/javascript">
function validate(that,e){
  var eventObject = window.event? event : e;
  var keyCode = eventObject.charCode? eventObject.charCode : eventObject.keyCode;
  if (keyCode != 8) {
    alert(that.value);
  }
}
</script>
</head>

<body>
<input type="text" id="newpass" onkeyup="validate(this,event);" />
</body>
</html>

答案 1 :(得分:1)

如果您希望函数在用户输入完成后获取值,请使用onchange而不是按键

注意: onkeyup正在按预期工作。如果你释放密钥,它会被调用一次。如果你坚持退格然后释放然后它只被调用一次。

onkeypress没有获取值,因为事件在值存储之前被踢了。

另一种选择是忽略退格

function validate(event) {
    var keynum;
    if (window.event) {
       keynum = window.event.keyCode;
    } else if (event.which) {
       keynum = event.which;
    }

    if (keynum == 8) { // backspace 
      return;
    }
    alert(document.getElementById('newpass').value);
}

或者您可以检查上一个键,如果它相同则忽略它

var previousKey;
function validate(event) {
    var keynum;
    if (window.event) {
       keynum = window.event.keyCode;
    } else if (event.which) {
       keynum = event.which;
    }

    if (keynum == previousKey) { // backspace 
      return;
    }

    previousKey = keynum;

    alert(document.getElementById('newpass').value);
}

或者如果它的退格再次忽略