2015-07-10 67 views
1

我有以下代碼。如果我按回車鍵,它會觸發點擊兩次。如何避免多次觸發事件?(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

回答

1

我得到了最簡單的解決方案。使用event.type屬性。

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

刪除的事件之一:

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

每一個按鍵(現在,這是順便說一下其他事件),同時觸發​​和keyup事件,不是嗎?

+0

正如我已經提到的問題,我必須找出方法從現有的代碼 –

+0

'$('#btnEnter')。click();'做什麼?順便說一句,你的意思是你不能編輯代碼?你需要解釋一些,爲什麼你必須保持這兩個事件。 –

+0

它會做阿賈克斯後 –

-1

創建var triggered = false;並添加

&& !triggered 

要將if條件,並

triggered = true; 

給你的函數,並使其再次假時,您的事件已準備好再次觸發

0

這是我很快想出來的。這是你在追求什麼?

$(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

0

擴展這個片段中,當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>