1

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

4

2 回答 2

4

It sounds like you want to get the current value of your input field as someone is typing, but want to ignore if they use backspace:

<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>
于 2012-06-05T18:40:34.020 回答
1

如果您希望函数在用户完成输入后获取值,则使用onchange而不是 on key up

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

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

于 2012-06-05T18:37:41.580 回答