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 は current を提供しますが、何度も実行しています。

4

2 に答える 2

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>
于 2012-06-05T18:40:34.020 に答える
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);
}

または、バックスペースが再び無視される場合

于 2012-06-05T18:37:41.580 に答える