jQueryで2つのドロップダウンリストを連動させる方法

2015.04.23
jQueryでドロップダウンを連携させる記事アイキャッチ

こんにちは、@Yuuです。

知人から受けた案件で、1つのドロップダウンリストを選択したら、もう1つのドロップダウンリストの要素を自動的に変更するということを行ったので、備考録も兼ねて記録しておきます。

やりたかったこと


Wドロップダウンリスト

上のイメージはちゃちゃっと作ってしまったのですが、やりたい事の感じは伝わるでしょうか?

1つ目のドロップダウンリストで、国名を選んだら、2つ目のドロップダウンリストでは、その国の都市だけが選択できるようになって欲しい。

ということをjQueryを使って制御してみたいと思います。

ちなみに、このようなプラグインは探せば豊富にあります。自分がやりたいことと合致するプラグインが見つかった人は、わざわざ自分で作るのではなく、そちらのプラグインを使った方が楽だと思います。

ただ、僕が今回やりたかったのがクラス名を使っての制御で、中々そのようなものが見つからなかったので自分でやっちゃった!(・ω<)て感じです。

Tips

このようなプルダウンを連動させることを「HierSelect」と言うそうです、知らんかった。

スポンサーリンク

処理の記述

HTMLの準備

まず以下のようなHTMLファイルを用意します。

肝となるのはクラス名です。

今回の最終的な処理内容として、国名に付けたクラス名と、都市名のクラス名が同じものだけを残すという処理にしようと思います。

なので、例えば日本という国名に対して"japan"というクラス名をつけたら、日本の都市名にも"japan"というクラス名を付けて下さい。

またこのファイルではjQueryはCDNを使用しているので、このファイルをコピーして使う方は、実行する時に必ずインターネットに繋がる環境で実行して下さい。

jQueryの記述

今の状態だと、国名で「日本」を選択しても、都市名に「シドニー」、「ニューヨーク」が表示されてしまう非常にクレイジーな状態です。

まず、国名が変更されたら何かアクションを起こすようにしてみましょう。
SELECT要素が変更した時にjQueryを反応させるには$('select[name="country"]').change()のように記述します。

また、選択された要素を取得する場合は
$('select[name="country"] option:selected')のように記述します。

では、scriptタグ内にコードを記述していきます。

ここまで記述するとコンソール画面に選択された要素のクラス名が、"Japan"、"America"などというように表示されると思います。

次に、選択した国のクラス名と同じクラス名を持つ都市名だけを表示する処理を記述していきます。

都市名が存在する分だけfor文で回し、もし都市のクラス名が選択された国名のクラス名と同じなら表示、そうでないのであれば非表示にするという処理を追加しました。

この状態だと国名を選んだ後、「都市名を選択して下さい」という文字が表示されなくなってしまいます。
また国名を変更した際に、前回選択した都市名が残ってしまいます。

そこで、国名を選択した際にも「都市名を選択して下さい」という要素を表示しつつ、強制的に「都市名を選択して下さい」という要素を表示するようにします。

これで、1つ目のドロップダウンリストを選択したら2つ目のドロップダウンリストを限定させることが出来ましたね。

まとめ

動作確認をchromeとfirefoxでしかしていないので、IEで動くかちょっと分からないですが、このコードを使用したい方は是非自由に使用しちゃって下さい。

いずれ余裕があればプラグイン化しちゃおうかな。

ではでは
今回はこの辺で!ヽ(•̀ω•́ )ゝ✧

jQueryでドロップダウンを連携させる記事アイキャッチ

この記事が気に入ったらいいね!
して最新情報をチェックしよう!

スポンサーリンク