2009-09-11 8 views
28

キー入力がテキストボックスに発生したときに、私は関数が実行されるようにしたいので、私はこのコードを持っているを取得しますテキストボックスjQueryのキープレス()イベントは、テキスト

var textValue = ("input[x]").val(); 

にテキスト値に基づいて何かをすることは今ここでの問題は、私のテキストボックスは、「彼は言いますので、もしそれがキーで遅れていることであると私は、私が欲しい、「L」を入力します私のtextValueは 'Hel'になりますが、文字はまだテキストボックスに入れられていない可能性があるので、前の値 'He'を返しています。

私の機能の中で「Hel」を得る方法はありますか?

おかげで:)

答えて

51

あなたがからkeyupイベントを使用しようとすることができます:

$(selector).keyup(function() { 
    var textValue = $(this).val(); 
    DoX(); 
}); 
9

使用onkeyup、それは正しい値が表示されます。

27

あなたが使用して立ち往生しているならば、あなたは最後の文字は次のように入力された得ることができますいくつかの他の理由(あなたが示唆したようkeyUpイベントに変更することはできません)のためにkeypressedこれは:

$("input[x]").keypress(function (e) { 
    var c = String.fromCharCode(e.which); 
    //process the single character or 
    var textValue = $("input[x]").val(); 
    var fulltext = textValue + c; 
    //process the full text 

}); 
+2

'(" input [x] ")val()'は、 '$(" input [x] ").val()'またはそれより良い: '$(this) () 'またはそれ以上のもの:' this.value' –

+0

@Oleg Gありがとうございます。 –

+6

このアプローチで問題が発生した後の警告の言葉 - カーソルは常にテキストボックステキストの最後にあると仮定します。たとえば、E-S-T-Home-Tと入力すると、通常のエディタウィンドウに "TEST"が表示されますが、このJSは "ESTT"になります。 –

0

遅延なしでsetTimeoutを使用します。これは、キー入力イベントが完了した直後に実行されるので、正しい入力値が得られます。

$("input[x]").keypress(function() { 
    setTimeout(DoX); 
}); 
関連する問題