我有以下代碼。如果我按回車鍵,它會觸發點擊兩次。如何避免多次觸發事件?(Kepping keyup keydown在一起)。注意:這種情況在鉻不存在的,在IE避免同時使用keyup,keydown上的多個事件
$(document).on('keyup keydown','#txtbox', function (event) { if(event.which == 13)$('#btnEnter').click(); return false;}});
我有以下代碼。如果我按回車鍵,它會觸發點擊兩次。如何避免多次觸發事件?(Kepping keyup keydown在一起)。注意:這種情況在鉻不存在的,在IE避免同時使用keyup,keydown上的多個事件
$(document).on('keyup keydown','#txtbox', function (event) { if(event.which == 13)$('#btnEnter').click(); return false;}});
我得到了最簡單的解決方案。使用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
事件,不是嗎?
正如我已經提到的問題,我必須找出方法從現有的代碼 –
'$('#btnEnter')。click();'做什麼?順便說一句,你的意思是你不能編輯代碼?你需要解釋一些,爲什麼你必須保持這兩個事件。 –
它會做阿賈克斯後 –
創建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");
});
因此,在你的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>
爲什麼你需要捕獲這兩個事件? –
@ Claudio Redi我已經寫了Textbox驗證來限制進入maxlength。我的項目已經有這個代碼。我現在不能改變它。我需要從現有的代碼中找出一些方法。 –
如果不是上面的發佈代碼,你可以在哪裏進行更改? – lshettyl