jQuery UIのオートコンプリートテキストフィールドにリモートデータソースがあります。 テキストフィールドの値が手動またはプログラムによって変更された場合に、変更イベントを発生させる必要がありますか?
- 更新し、テキストフィールドの値:オートコンプリートの
select
イベントは、3つのことを行いますフィールド(前のステップで作成した)
テキストフィールドは、上記のステップ2でロードされたデータを削除し、オートコンプリートのsearch
イベントをトリガchange
イベントがあります。
これはIE(バージョン9と10でテスト済み)では完全に動作しますが、Firefoxでは動作しません。オートコンプリートリストから選択すると、ネットワークトラフィックを分析するとAJAXコールが行われていることが示されますが、オートコンプリートのsearch
イベントがトリガーされます。私は問題を上記のステップ3の後にテキストフィールドのchange
イベントをトリガするまで追跡しました。これは、テキストフィールドに何かを入力してオートコンプリートリストをトリガしたためで、テキストフィールドがプログラムによって更新されたにもかかわらずです。
クイック例:http://jsfiddle.net/2umrJ/1は
IE10で
出力(例は単なるテキスト・フィールドにkeyup
イベントを使用していることを簡潔にするため。):
0をトリガFirefoxの2input1.focus()
をトリガー input1.blur())(
input2.focusをトリガ
出力:
input1.focusは()(
input1.blurをトリガ)(
input1.changeをトリガ)(
input2.focusをトリガする)ことができるよう
をトリガFirefoxはIEが実行していない間にchange
イベントを発生させます。今私は、デフォルトで(つまり、余分なコードなしで)change
イベントは、値が手動で変更されたときにのみトリガされることを知っていますが、値が変更されたときに正しい動作は何ですか?手動でもプログラムでも ?
Firefoxの動作が正しい場合(または少なくとも間違っていない場合)、特に重要なことは、Firefoxを防ぐ最も良い方法は何ですか?オートコンプリートリストから何かを選択した後で、フォーカスがプログラムによって変更されているときにchange
イベントをトリガーすることは望ましくありません。
不思議なことに、Firefoxは 'change'イベントを1回だけ起動します。上のJSFiddleでは、最初のテキストフィールドの後続のキー押下は 'input1.blur()'と 'input2.focus()'だけをトリガします。それは正しいことができない、それはできますか? – Indrek
私はオペラとクロームのフィドルもチェックしました - 変更イベントを起こさないでください。 – Zach
http://jsfiddle.net/2umrJ/2/私の更新されたフィドルを見て、それが一度だけ発砲した理由を理解するでしょう。 (ヒント - バー==バー) – Zach