仅调用一次 onkeyup 函数

Calling onkeyup function only once

本文关键字:一次 onkeyup 函数 调用      更新时间:2023-09-26

我写了一个示例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 提供电流,但正在执行多次。

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

<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>

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

注意: 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);
}

或者如果它再次是退格键,请忽略