28

テキストボックスでキーが押されたときに関数を実行したいので、次のコードを使用します。

$("input[x]").keypress(function() {
        DoX();
    })

これは正常に機能していますが、私の関数では、テキストボックスのテキスト値に基づいて何かを実行したいと思います

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

ここでの問題は、キーが遅れていることです。テキストボックスに「He」と表示され、「l」と入力すると、textValueは「Hel」になりますが、前の値「He」が返されます。おそらく、キャラクターはまだテキストボックスに入れられていないからです。

ここで私の関数から「Hel」を取り除く方法はありますか?

ありがとう :)

4

4 に答える 4

59

keyup イベントの使用を試すことができます。

$(selector).keyup(function() {
  var textValue = $(this).val();
  DoX();
});
于 2009-09-11T15:21:45.750 に答える
27

他の理由で keypressed の使用に行き詰まっている場合 (そのため、提案されているように keyup に変更することはできません)、次のように最後に入力された文字を取得できます。

$("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

});
于 2009-09-11T15:26:19.140 に答える
9

を使用するonkeyupと、正しい値が表示されます。

于 2009-09-11T15:20:15.223 に答える
0

遅滞なくsetTimeoutを使用してください。キープレスイベントが完了した直後に実行されるため、入力の正しい値が得られます。

$("input[x]").keypress(function() {
  setTimeout(DoX);
});
于 2015-01-24T13:55:40.400 に答える