我需要在jquery中找到连续输入键。这可能吗?
$('#password-input').keyup(function(e) {
if (e.which == 13) {
alert("Enter key")
}
});
这里如果我按 ENTER 键不止一次意味着我会收到两次警报。但我只需要一次。
请帮助我!
答案 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()
设置显示警报的延迟。在延迟时间内,如果再次按下回车键,则删除先前的超时并设置新超时。在超时结束时,显示警报。
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;
您可以将延迟时间更改为自定义时间。
答案 4 :(得分:0)
var pressed = false;
$('#password-input').on('keyup',function(e) {
if (e.which == 13 && !pressed) {
pressed = true;
alert("Enter key");
}
});