jqueryのカスケードドロップダウンを作成しました。ユーザーに「バックアップ」をさせ、以前のドロップダウンを再選択できるようにする機能を追加しました。これにより、次のドロップダウンがリロードされ、後続のドロップダウンがクリアされ、無効になります。カスケードドロップダウン - オプションを操作するためにドロップダウンで変更イベントを一時的に無効にする方法
http://jsfiddle.net/goodeye/gA6GZ/
問題が通じ初めては、選択要素の変更イベントがバインドされた後であるので、私は、新しい値をリロードすると、後で変更イベントが発火する原因だと思います。
連鎖する代わりに.change()バインドを分離しました。私はこれまで、選択オプションをロードする前にチェインしていました。これは最初の時間を助けましたが、その後の時間は助けませんでした。この問題については
、私は特にこの順序に良い方法を探しています:
- 回避の変更()
- ドロップダウン
- が変化()
この質問: Best way to remove an event handler in jQuery? は、主な回答としてunbind()を持っています。その後、live()を使用する次の回答です。 live()アプローチは、私を少し混乱させるクラスを使用し、多くの投票を取得しませんでした。
再現する:
手順1を選択します。手順2を参照してください。
手順2を選択し、手順3の火災を参照してください。
手順1をもう一度選択し、手順2の火災を参照してください。
問題が始まる:
ステップ2を選択し、ステップ3を参照してください。
手順3を選択し、手順4を参照して3回発火します。
手順1をもう一度選択し、手順2の2回の実行を参照してください。
など
さらに悪化します。私はステップ3の火を5回見ます。
いくつかの詳細:実際のコードで
、JSONのAJAX呼び出しからこれらのロード。私はこの例から削除し、ハードコードされたオプションを追加してシミュレートしました。これをイベントの問題に限定しています。
これはサーバー側から開始されるため、最初のドロップダウンはすでにHTML内にあります。次の3つは、(シミュレートされた)json呼び出しからロードされます。
これらは、実ページにこれらのドロップダウンの複数のセットがあるため、識別のためのクラスを使用します。コードは$(this)を使用して、選択された1つのセット内で作業するように注意します。
オプションが1つだけの場合は「自動選択」し、次のオプションに移動する機能もあります。このコードはこの中にありますが、シミュレートされた例には、この問題のこの問題を回避するために、複数のオプションがあります。
あなたのアイデアを事前におねがいします!
複数の呼び出しの原因となっているオプションが更新されているかどうか、または変更(複数回)を複数回呼び出すためであるかどうかはわかりません。シーケンスのたびにchange()をもう一度呼び出すと、複数回起動されますか? ...それは別の質問です。 – goodeye