1

私はval()、テキスト フィールドや、テキスト フィールドshow()hide()値と一致する ID を持つ div を取得する jQuery メソッドに取り組んでいます。キーストロークを「検索用語」の一部としてコードに認識させたいのですが、代わりに、キーストロークの直前のテキスト フィールドの現在の値に基づいて検索しています。

コード スニペット:(重要な場合はさらに提供できますが、そうは思いません)

handleTextType: function(event){
    //change visible divs on change event
    var currentText = $(this).val().replace(' ', '').toLowerCase(); //to match id names
    console.log(event); //testing junk
    console.log(currentText); //testing junk
    infoBot.revealMatches('#'+currentText); //other method which actual does the reveal
    //can't use e.preventDefault or return false - text field won't update!!
},

このコードは、$('myTextField').keypress()単なる HTML テキスト フォームである にバインドされます。

部分的な文字列に一致するようにこのメソッドを少し「スマートアップ」すると、つまり、これまでに入力したのは「pat」だけである場合、div を「患者」の ID と一致させます。これは問題ではないかもしれませんが、偶発的な修正であり、私はそれに完全に興奮しているわけではありません. このメソッドの残りの部分が呼び出される前に、テキスト フィールドの値を更新するにはどうすればよいですか? 呼び出す前にsuper()実際に発生して文字列を更新するように実装できる、または同様のものはありますか?keypressval()

4

4 に答える 4

1

keypressイベントにバインドする代わりに、keyupイベント ハンドラーが呼び出される前にフィールドの値が変更されます。

于 2013-06-10T18:49:18.157 に答える
0

keyup他の人が提案したように動作します

changeこれは、実際の値が変化した場合にのみ発生するため、私は好きです。上/下/左/右の矢印を押すと発射されますkeyup

于 2013-06-10T19:28:18.960 に答える
0

スケジュールされたすべてのイベント ハンドラーの実行が完了するまでコードの実行を遅らせるには、タイムアウトをゼロにして setTimeout を使用してみてください。

例として、次のコードを参照してください。

handleTextType: function(event) {
    var currentText = $(this).val().replace(' ', '').toLowerCase(); //to match id names
    setTimeout(function() {
        // code here to execute after all currently-scheduled
        // code (other event handlers) have been run
    }, 0);
},

setTimeout()通常、コードブロックの実行を一定時間遅らせるために使用されます。ただし、ゼロの時間で呼び出されると、他のすべての処理が終了するとすぐにコードを実行するという実際的な効果があります。

于 2013-06-10T18:51:10.507 に答える