1

select2 を使用して 3 つの依存ドロップダウンのスタイルを設定すると、プロジェクトで多くの問題が発生します。

ユースケース: A、B、C の 3 つのドロップダウンがあります。C は単独で選択できます。A には非デフォルト値の B が必要であり、その逆も同様です。select2 なしでこれを行うのは簡単ですが、標準のドロップダウン.select2("val"でプレーンの代わりに使用.val(すると、ドロップダウンをリセットすると、実際の値に変更がなくても「変更」イベントが発生するという問題が発生します。

フィドル: http://jsfiddle.net/nmeoosLk/7/

これは解決策になる可能性がありますが、エレガントですか? http://jsfiddle.net/8ozv4nr1/

4

2 に答える 2

0

ここで知っておくと便利なことがいくつかあります。

まず、.select2("val", xyz) は と同等 .val(xyz).trigger("change")です。changeイベントがトリガーされる理由は 2 つあります

  • 以前のバージョンの Select2 はchangeイベントをトリガーしていたため、簡単なアップグレード パスを用意しました。
  • ページ上の他のコンポーネントは、イベントをリッスンしてchange、値がいつ<select>変化したかを知る必要があるため、イベントをトリガーすることは理にかなっています。

<select>次に、Select2 は、イベントをトリガーした場合に基になる値が変更されたかどうかのみを知ることができますchange

changeしたがって、これら 2 つの問題を組み合わせると、イベント内で新しい値を設定したときに Select2 が期待どおりに動作しない理由が説明され始めます。


changeイベントの代わりにイベントを使用してselect2:select、新しい選択がいつ行われたかを判断することにより、周期的なイベントを回避できますchange

https://jsfiddle.net/nmeoosLk/8/

これにより、Select2 固有のイベントを使用することになりますが、値が変更されたかどうかを常に確認したくない場合は、これが最善の方法です。個人的には、値が変わらない場合はイベントをトリガーしないことをお勧めchangeします。少量のコードが、他のコンポーネントがページで何が起こっているかを理解するのに役立つからです。

于 2015-04-05T22:19:50.943 に答える