2010-06-17 56 views
89

我:如何獲得jquery .val()AFTER keypress事件?

$(someTextInputField).keypress(function() { 
    alert($(this).val()); 
}); 

現在警報始終返回值的按鍵之前(如該字段爲空,我輸入「a」和警報給我「」那我的類型。「B」和警報給我'一'...)。但我想要按鍵後的價值 - 我該怎麼做?

背景:只要文本字段包含至少一個字符,我想啓用一個按鈕。所以我在每個按鍵事件上運行這個測試,但使用返回的val(),結果總是落後一步。使用change()事件對我來說不是一種選擇,因爲直到您離開文本框,該按鈕纔會被禁用。如果有更好的方法做到這一點,我很高興聽到它!

+0

如果該按鈕被禁用,如果再次文字被刪除?如果是這樣,你可能不得不堅持按鍵。 – Brilliand 2014-01-27 19:00:20

回答

126

變化keypresskeyup

$(someTextInputField).on("keyup", function() { 
    alert($(this).val()); 
}); 

keypress當按鍵被按下時,該鍵被釋放時keyup被激發被激發。

+0

謝謝,你們很棒! – 2010-06-17 16:26:42

+0

想知道爲什麼這個偉大的功能是隱藏的那樣... – Ron 2012-09-07 12:27:09

+2

鑰匙被按下時無法工作... – Brilliand 2012-12-01 00:07:03

3

嘗試這樣:

$('#someField').keypress(function() { 
    setTimeout(function() { 
    if ($('#someField').val().length > 0) 
     $('#theButton').attr('disabled', false); 
    }, 1); 
}); 

,簡單地介紹了超時,使「按鍵」事件循環完成後,你的代碼將緊隨其後幾乎運行。如此短的計時器間隔(即使通過瀏覽器四捨五入)也不會引人注目。

編輯 —或者你可能使用「KEYUP」像其他人一樣說,雖然它的語義是不同的。

+0

這不是一個benig * smart *的問題。 keyup事件不提供相同的結果。如果你想得到實際的字符被輸入(例如&符號),而不是一系列你必須檢查shift或ctrl鍵的狀態的關鍵事件,那麼你可以通過按鍵來獲得shift,ctrl等不同的事件是要走的路。 – Ripside 2015-06-05 16:42:53

+0

正確;這就是我所說的「它的語義是不同的」。 – Pointy 2016-05-06 12:53:28

3

您可能需要連接一個onchange事件處理程序,而不是使用任何關鍵事件。

$(someTextInputField).change(function() { 
    alert($(this).val()); 
}); 

使用Edit > Paste或單擊右鍵,然後粘貼將觸發一個更改事件,但不是關鍵事件。注一些瀏覽器可能會模擬一個粘貼的關鍵事件(雖然我不知道任何),但你不能指望那種行爲。

4

或者,您可以用0

這樣,超時使用keydown事件,這些變化將被立即應用,而不是當用戶停止按住按鍵被應用。

$(someTextInputField).on("keydown", function() { 
    setTimeout(function($elem){ 
    alert($elem.val()); 
    }, 0, $(this)); 
}); 
+0

在按住Backspace的情況下,這仍然會出現奇怪的現象...也許按下超時時間爲0的按鍵? – Brilliand 2014-01-27 16:14:22

+0

啊,沒關係,OP沒有指定如果文本字段被清除應該發生什麼。 – Brilliand 2014-01-27 18:59:08

+0

rlly? 'timeout'?似乎並不是一個好主意 – jose920405 2017-12-15 21:50:20

49

奇怪,沒有人提到的JS 「輸入」 事件:

$(someTextInputField).on('input', function() { 
    alert($(this).val()); 
}); 

推薦。

https://developer.mozilla.org/en-US/docs/Web/Events/input

+7

哇,這是幾個未答覆/嚴重回答的SO問題的答案。 – BenRacicot 2015-11-02 19:13:04

+3

當您需要忽略在輸入欄中按方向鍵,移位等時,這也很棒。 – hovado 2015-11-19 14:02:55

+3

這應該是2016年接受的答案! – adarshr 2016-03-10 12:26:08

相關問題