2013-04-03 20 views
5

jQuery UIのオートコンプリートテキストフィールドにリモートデータソースがあります。 テキストフィールドの値が手動またはプログラムによって変更された場合に、変更イベントを発生させる必要がありますか?

  • 移動は別のテキストにフォーカスを
  • は、ページにいくつかのより多くのデータをロードするためのAJAX呼び出しを行うオートコンプリートリストから選択される一つと

    1. 更新し、テキストフィールドの値:オートコンプリートのselectイベントは、3つのことを行いますフィールド(前のステップで作成した)

    テキストフィールドは、上記のステップ2でロードされたデータを削除し、オートコンプリートのsearchイベントをトリガchangeイベントがあります。

    これはIE(バージョン9と10でテスト済み)では完全に動作しますが、Firefoxでは動作しません。オートコンプリートリストから選択すると、ネットワークトラフィックを分析するとAJAXコールが行われていることが示されますが、オートコンプリートのsearchイベントがトリガーされます。私は問題を上記のステップ3の後にテキストフィールドのchangeイベントをトリガするまで追跡しました。これは、テキストフィールドに何かを入力してオートコンプリートリストをトリガしたためで、テキストフィールドがプログラムによって更新されたにもかかわらずです。

    クイック例:http://jsfiddle.net/2umrJ/1
    IE10で

    出力(例は単なるテキスト・フィールドにkeyupイベントを使用していることを簡潔にするため。):

    input1.focus()
    をトリガー input1.blur())(
    input2.focusをトリガ

    0をトリガFirefoxの2

    出力:

    input1.focusは()(
    input1.blurをトリガ)(
    input1.changeをトリガ)(
    input2.focusをトリガする)ことができるよう

    をトリガFirefoxはIEが実行していない間にchangeイベントを発生させます。今私は、デフォルトで(つまり、余分なコードなしで)changeイベントは、値が手動で変更されたときにのみトリガされることを知っていますが、値が変更されたときに正しい動作は何ですか?手動でもプログラムでも

    Firefoxの動作が正しい場合(または少なくとも間違っていない場合)、特に重要なことは、Firefoxを防ぐ最も良い方法は何ですか?オートコンプリートリストから何かを選択した後で、フォーカスがプログラムによって変更されているときにchangeイベントをトリガーすることは望ましくありません。

  • +0

    不思議なことに、Firefoxは 'change'イベントを1回だけ起動します。上のJSFiddleでは、最初のテキストフィールドの後続のキー押下は 'input1.blur()'と 'input2.focus()'だけをトリガします。それは正しいことができない、それはできますか? – Indrek

    +0

    私はオペラとクロームのフィドルもチェックしました - 変更イベントを起こさないでください。 – Zach

    +1

    http://jsfiddle.net/2umrJ/2/私の更新されたフィドルを見て、それが一度だけ発砲した理由を理解するでしょう。 (ヒント - バー==バー) – Zach

    答えて

    3

    変更イベントがfirefoxでトリガーされないようにするには、私は自分のロジックに変数を設定します。これはプログラムによって変更され、変更イベントロジックでは変更ロジックを実行しないでくださいプログラムでトリガされている場合は、変数をリセットしてから終了してください。

    +0

    これは私がやったことでした。私はこれを行うためのよりエレガントな方法、またはイベントを配線するためのより良い方法があると期待していましたが、これで十分です。ありがとう! – Indrek

    関連する問題