私はこれに Dojo を使用していますが、この問題は Dojo 固有ではなく、JavaScript に固有のものであると思われます。テキスト ボックスを作成し、onInput イベントが発生したときに呼び出される関数を登録しました (onKeyPress、onKeyUp、および onKeyDown でこれを試したので、基本的にはユーザーがテキストを入力したときに発生するすべてのイベントです)。
イベントが発生するので、うまく機能しています。問題は、メソッドでテキストボックスの値を参照し、更新されていないことです。テキストボックスの値は、テキストボックスがフォーカスを失った場合にのみ更新されます。ボックスに再度入力すると、フォーカスを失った後の値が取得されます。つまり、イベントを発生させた追加のキー押下は含まれません。したがって、これは onInput と呼ばれるコードです。
console.log("searching for: " + this.textbox.value);
(最初は空の) テキスト ボックスに「tes」と入力すると、コンソール ログに次のような 3 行が表示されます。
ログ: 検索:
ログ: 検索:
ログ: 検索:
次に、ページの他の場所をクリックし、テキストボックスに戻ってもう一度入力すると、「t」と言うと、次のようになります。
LOG: 検索: tes
もう一度クリックしてから戻って「1」と入力すると、次のようになります。
ログ: 検索: テスト
私はどこかでばかげた間違いを犯したと確信しています。最後にフォーカスが失われる前の値ではなく、キープレスタイプのイベントが発生した直後にテキストボックスの現在のコンテンツを取得する方法を教えてもらえますか?
ありがとうサイモン
編集:
要求に応じて、ここにコード (私の SearchUtils.js クラスから) があります。これには、intermediateChanges プロパティを true に設定することが含まれており、他の誰かが参照するのに役立つ場合に備えて問題を解決しました。
// Create the Search UI
createUI: function (elementName) {
// Get a reference to attach the UI to
var element = dojo.byId(elementName);
if (element) {
// Add a text box to enter the search text
this.textbox = new dijit.form.TextBox({
id: "txtSearch",
intermediateChanges: true
});
this.textbox.on("change", lang.hitch(this, this.search));
this.textbox.placeAt(element);
}
}