我正在寫一個修正部件到一個文本區圖書館,所以我需要在用戶開始輸入的東西來檢測:獲取.VAL()*不* KEYUP
this.$input.bind('keydown keyup', function() {
if (this.$input.val() == …) { … }
}
的.val()
只有在觸發keyup
時纔會更新。這太拖延了。我想知道上的輸入框的狀態。你知道一個改善.val()
的圖書館嗎?
我正在寫一個修正部件到一個文本區圖書館,所以我需要在用戶開始輸入的東西來檢測:獲取.VAL()*不* KEYUP
this.$input.bind('keydown keyup', function() {
if (this.$input.val() == …) { … }
}
的.val()
只有在觸發keyup
時纔會更新。這太拖延了。我想知道上的輸入框的狀態。你知道一個改善.val()
的圖書館嗎?
Found a seemingly perfect solution。使用上述的HTML5 oninput
和onpropertychange
for IE的回退。輝煌。太棒了。其他快樂的話。
太遲了?無法想象10ms會產生很大差異的場景,但您可以始終檢查事件參數並從那裏獲取字符。或嘗試keypress。
編輯:還有input event只要輸入發生變化(在鍵值之前,但值改變之後)就會被觸發;
以確定在/keypress
字符的唯一方法是通過使用event.keyCode
或event.which
屬性(其中event
是一個對象,作爲第一個參數事件監聽器函數傳遞)。
交換keypress
事件的事件。該按鍵被按下時,該事件監聽器被觸發。和keyup
只發射一次。在/keyup
事件中,可能已添加多個字符。
對於按鍵(例如「a」鍵),將「a」附加到文本輸入之前觸發事件。您可以檢測事件類型,以及.keyCode
(或.which
)事件屬性是否是可打印範圍內的鍵,並嘗試預測keyup
事件後可能返回的內容,但這是個壞主意。
this.$input.bind('keydown keyup', function(e) {
var val = this.$input.val();
if (e.type == 'keydown') {
// Here is where you would check to see if e.keyCode was a printable
// character. Note that key codes differ from ASCII codes. For
// example, the "a" key will return key code 65, which is actually
// the ASCII code for "A", so you would need to check for the presence
// of shift keys and such. Again, this is a bad idea :)
val += String.fromCharCode(e.keyCode);
}
if (val == …) { … }
}
爲什麼這是一個壞主意? –
@Matthew:因爲它將一個方形釘子推入圓孔。按照定義,'keydown'事件發生在按鍵上的任何事情之前。這意味着無論什麼控制鍵到文本翻譯還沒有機會運行。所以它基本上是以非常直觀和全面的方式重新實現翻譯邏輯。換句話說,你會重塑一個劣質車輪。 – FtDRbwLXw6
由於輸入框的文本會立即對鍵盤輸入作出反應,因此我的小部件的延遲響應確實非常突出。 –
@MthetheRobertson:查看更新。 – mpen
哇,看起來完美無瑕。你贏得一切。 –