2013-12-17 80 views
0

我正在觸發該檢查他們在被觸發輸入的值某些鍵的組合事件搶奪輸入正確的值。問題上的keydown/KEYUP

我遇到的是問題可以觸發keypress或​​並鍵入一個字符而不觸發keyup

enter image description here

相反只有keyup事件可以讀取與新輸入的字符輸入的值,因爲這兩個字符前​​和keypress火被添加到輸入。

JSFiddle Demo

注意:按Shift鍵和任何其它字符如果你按住shift鍵,然後按下並釋放另一個字符keyup事件將觸發,但如果您按下並在同一時間發佈的轉變。其他鍵,keyup事件將不會觸發。)

我能想到的唯一解決方案是觸發keyup事件之一​​事件,但是這可能會導致問題的其他地方。

不幸的是,我也不能因爲他們按下了輸入字段包含我想要的那個組合鍵,因爲當輸入中有其他字符時它們可能會進入熱鍵。

這給我留下了一個想法,我必須檢查輸入的長度,如果它等於零,他們只是按下該熱鍵,它會觸發。

但我想知道是否有更好的方法來做到這一點?

+1

還在尋找,但問題出現時的順序發生:下移,那封信,升檔,信了。這似乎在Chrome,IE和FF中可靠地丟失了KEYUP。在FF中,如果時間緊,它有時也會丟失KEYDOWN並且只會觸發KEYPRESS。 –

回答

1

按鍵事件似乎持續發生。有問題的按鍵組合未能觸發Keyup,但它們會觸發輸入事件(與輸入值更改後的Keyup一樣)。但是,輸入不包含有關實際按鍵的信息。

我不知道您在輸入內容方面實際尋找什麼條件。但是聽取按鍵,然後在下一個輸入事件時獲得新的輸入內容聽起來像它可能是你需要的。

喜歡的東西:

var hotkey = false; 
var lastChar = ''; 

$('#in').on('keypress', function(e) { 
    hotkey = ((e.which > 16 || e.which < 16) && e.shiftKey); 
    lastChar = e.which;  
}); 


$('#in').on('input', function(e) { 
    if (hotkey) 
     $("#out").append('<div>' + lastChar + ' + shiftKey triggered ' + '<br/> INPUT: ' + $("#in").val() + '</div>'); 
}); 
+0

很好的解決方法。我甚至不知道「輸入」事件。原來我可以使用它並檢查輸入長度並確定輸入中是否存在正確的字符。謝謝。 – Johannes

+1

我發現它在嘗試回答問題的過程中,實際上,這很方便 - 今天在我自己的項目中證明它很有用。 –