避免同时使用keyup,keydown上的多个事件

问题描述:

我有以下代码。如果我按回车键,它会触发点击两次。如何避免多次触发事件?(Kepping keyup keydown在一起)。注意:这种情况在铬不存在的,在IE避免同时使用keyup,keydown上的多个事件

$(document).on('keyup keydown','#txtbox', function (event) { if(event.which == 13)$('#btnEnter').click(); return false;}}); 
+1

为什么你需要捕获这两个事件? –

+0

@ Claudio Redi我已经写了Textbox验证来限制进入maxlength。我的项目已经有这个代码。我现在不能改变它。我需要从现有的代码中找出一些方法。 –

+1

如果不是上面的发布代码,你可以在哪里进行更改? – lshettyl

我得到了最简单的解决方案。使用event.type属性。

if(event.which == 13 && event.type == 'keyup') 
{ 
// Do some stuff. You can use event.type = 'keydown' also 
} 

删除的事件之一:

$(document).on('keyup', function (event) { 
    if(event.which == 13) $('#btnEnter').click(); 
}); 

每一个按键(现在,这是顺便说一下其他事件),同时触发​​和keyup事件,不是吗?

+0

正如我已经提到的问题,我必须找出方法从现有的代码 –

+0

'$('#btnEnter')。click();'做什么?顺便说一句,你的意思是你不能编辑代码?你需要解释一些,为什么你必须保持这两个事件。 –

+0

它会做阿贾克斯后 –

创建var triggered = false;并添加

&& !triggered 

要将if条件,并

triggered = true; 

给你的函数,并使其再次假时,您的事件已准备好再次触发

这是我很快想出来的。这是你在追求什么?

$(document).on('keyup keydown', function (event) { 
 
    if(event.which === 13) { 
 
     $('#btnEnter').click(); 
 
    } 
 
}); 
 

 
$('#btnEnter').click(function() { 
 
    if ($(this).hasClass("keydown")) { 
 
     return; 
 
    } 
 
    $("div").append("I'm clicked on keydown only!<br/>"); 
 
    $(this).is(".keydown") || $(this).addClass("keydown"); 
 

 
    setTimeout(function() { 
 
     $('#btnEnter').removeClass("keydown"); 
 
    }, 150); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="btnEnter">I'd be clicked on enter key down</button> 
 
<div></div>

编辑:为了支持我的意见,你可以不喜欢以下。

$.ajax({ 
    method: "GET", // Or POST 
    url: "yourURL" 
    //other settings 
}).done(function(data) { 
    //Do your stuff 
    //And then, do: 
    $('#btnEnter').removeClass("keydown"); 
}); 
+0

因此,在你的ajax成功/完成功能,执行'$('#btnEnter')。removeClass(“keydown “);'。 'setTimeout'不需要,因为你需要在ajax完成后立即启用输入keydown。 – lshettyl

扩展这个片段中,当Ajax调用完成这个工程:

$(document).on('keyup keydown', function (event) { 
 
    if(event.which === 13) { 
 
     $('#btnEnter').click(); 
 
    } 
 
}); 
 

 
$('#btnEnter').click(function() { 
 
    if ($(this).hasClass("keydown")) { 
 
     return; 
 
    } 
 
    $("div").append("I'm clicked on keydown only!<br/>"); 
 
    $(this).is(".keydown") || $(this).addClass("keydown"); 
 

 
    $.ajaxComplete(function() { 
 
     $('#btnEnter').removeClass("keydown"); 
 
    }); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="btnEnter">I'd be clicked on enter key down</button> 
 
<div></div>