如何使用jquery防止多次输入按键?

时间:2016-09-13 08:36:46

标签: javascript jquery html keypress

我需要在jquery中找到连续输入键。这可能吗?

$('#password-input').keyup(function(e) {
    if (e.which == 13) {
        alert("Enter key")
    }
});

这里如果我按 ENTER 键不止一次意味着我会收到两次警报。但我只需要一次。

请帮助我!

5 个答案:

答案 0 :(得分:3)

您可以使用jQuery#bind绑定keyup事件,并在最终用户按“Enter键”时将keyup事件与jQuery#unbind取消绑定,以防止多次“输入密钥”:

var $passwordInput = $('#password-input');

$passwordInput.bind('keyup', function(e) {
  passwordInputKeyupHandler(e);
});

function passwordInputKeyupHandler(e) {   
  if (e.which === 13) {
    console.log('Enter key!');
    $passwordInput.unbind('keyup');

    return setTimeout(function(){
      console.log('Rebind keyup event');
      $passwordInput.keyup(passwordInputKeyupHandler);
    }, 2000);
  } 

  console.log('Any other key...');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input id="password-input" type="password">

请注意,@dorado在评论中指出,使用setTimeout()在2秒后进行'重新绑定',以避免最终用户重新加载页面。

答案 1 :(得分:1)

除了使用变量来存储状态之外,我想如果经过几毫秒你也会想要,然后再次按回车键会给你一个警告。这可以通过setTimeout来实现。例如,只有在间隔2000ms后按下回车键,才会重新检测回车键。

var pressed = false;
$('#input-element').keyup(function(e) {
    if (!pressed) {
        if (e.which == 13) {
            pressed = true;
            alert('Enter pressed.');
            i = setTimeout(function() {
                pressed = false;
            }, 2000);

        }
    }
});

答案 2 :(得分:0)

使用变量存储状态

var pressed = false;
$('#password-input').keyup(function(e) {
    if (!pressed) {
        if (e.which == 13) {
            pressed = true;
            alert('Enter key');
        }
    }
});

答案 3 :(得分:0)

使用.setTimeout()设置显示警报的延迟。在延迟时间内,如果再次按下回车键,则删除先前的超时并设置新超时。在超时结束时,显示警报。

&#13;
&#13;
var interval;
$('#password-input').keyup(function (e) {
    if (e.which == 13) {
      clearInterval(interval);
      interval = setTimeout(function(){
          alert("Enter key")
      }, 500);
    }
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="password-input" />
&#13;
&#13;
&#13;

您可以将延迟时间更改为自定义时间。

答案 4 :(得分:0)

    var pressed = false;
    $('#password-input').on('keyup',function(e) {
        if (e.which == 13 && !pressed) {
            pressed = true;
            alert("Enter key");
        }
    });