2012-06-13 102 views
8

嗨,我已經設置了自動完成輸入文本。 我試圖點擊一個btn和一個輸入按鍵來重新打印表格。幹訓局點擊工作正常, 但輸入按鍵好像它回採(即表中的閃爍)之前觸發了幾次jquery按鍵事件發射幾次

$('body').bind('keypress', function(e) { 
     if(e.keyCode==13){ 
      var str = $('#Filter').val(); 
      $('#Table').fadeOut("slow").load('printShorts.server.php?Sortby=<?echo $sort;?>&dir=<?echo $direction;?>&filter='+encodeURIComponent(str)+'&usergroup=<?=$usergroup?>&no-cache=' + (new Date()).getTime()).fadeIn("slow"); 
     } 

}); 

它不發生的時間和不同的充瀏覽器differntly作用..

回答

12

在一個HTML文本框組合的keydown事件將不足以防止其被解僱多次。你可以看到在keydown事件的jQuery的演示部分動作此行爲:http://api.jquery.com/keydown/

一個可行的辦法是使用事件處理程序「一」(見http://api.jquery.com/one/)。確保被處理的事件只有一次:

jQuery("#createNewProduct").one("keydown", function (e) { 
    //Do Stuff 
}); 
+8

謝謝,不錯的一個(明白嗎?:-)) – devmonster

+1

我看到你在那裏做了什麼 – Dishcandanty

+0

Ahhhh ... Aces!這一直在讓我瘋狂! – JustBaron

4

http://api.jquery.com/keypress/

的按鍵事件被髮送到一個元件,當瀏覽器寄存器鍵盤輸入。這與Keyydown事件類似,但關鍵重複情況下的 除外。如果用戶按下並按住一個鍵,則會觸發一次按鍵事件,但對於每個插入的字符觸發單獨按鍵事件爲 。此外,修飾鍵 (如Shift)會觸發keydown事件,但不會觸發按鍵事件。

改爲使用keydown。

7

這是按鍵事件的正確行爲。只要按鍵關閉,按鍵事件就會持續觸發(就像在textarea中按住某個字符鍵時,字符被多次添加,這與按鍵相關)。對於處理一次的情況,根據您的要求使用鍵盤或鍵盤事件。這兩個鍵和鍵都只被觸發一次。它如下所示:

{Key-Down} {Key-Press} {Key-Press} ..(as long as key is down).. {Key-Press} {Key-Up} 
1

嘗試將'keypress'更改爲'keydown'。

當瀏覽器註冊鍵盤輸入時,按鍵事件被髮送到一個元素。這與keydown事件類似,除了關鍵重複的情況。如果用戶按下並保持一個鍵,則觸發一次keydown事件,但是對於每個插入的字符觸發單獨的按鍵事件。

http://api.jquery.com/keypress/

1

的文檔按鍵狀態:

由於.keypress()方法只。對(「按鍵」,處理程序)的簡寫,可以使用.off(「keypress」)進行分離。

因此,你可以通過你的綁定之前加入.off()分離處理程序。我還將使用.on()替換.bind()函數,因爲現在已不贊成使用bind。像這樣的東西應該工作:

$('body').off().on('keypress', function(e) {