🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

854閲覧

【jQuery】セレクトボックスで非表示を切り替える方法

退会済みユーザー

退会済みユーザー

総合スコア0

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2020/12/10 04:03

編集2020/12/10 06:24

セレクトボックスで表示・非表示を切り替えたいです。

ほぼほぼカタチにはなったのですが
うまく動かない箇所があり投稿させていただきます。

参考)https://macoblog.com/select_show_and_hide/
こちらのサイトを参考に作成しております。

HTML

1<!-- 表示・非表示が切り替える要素 --> 2<ul> 3 <li class="area">北海道</li> 4 <li class="area">東京</li> 5 <li class="area">大阪</li> 6 <li class="area">兵庫</li> 7 <li class="area">京都</li> 8</ul> 9 10<!-- 絞り込むためのトリガー --> 11<select class="select"> 12 <option>全て</option> 13 <option>北海道</option> 14 <option>東京</option> 15 <option>大阪</option> 16 <option>兵庫</option> 17 <option>京都</option> 18</select> 19

CSS

1.hide { 2 /* 表示の切り替えに使用する */ 3 display: none; 4}
$('.select').on('change', function(){ // テキストを取得(例:北海道) var area = $(this).children(':selected').text(); $('.area').each(function(){ // 全て非表示にする(初期化) $(this).addClass('hide'); // '全て'が選択されていれば if(area == '全て'){ // 表示する $(this).removeClass('hide'); // テキスト(例:北海道)が一致していれば }else if($(this).html().match(area)){ // 表示する $(this).removeClass('hide'); } }); });

上記で例えば一度「北海道」を選択し、「すべて」を選択すると
何も表示されない状態になります。

どうすればすべて表示されるようになりますでしょうか?

ご教授下さい。よろしくお願いいたします。

Jsを別ファイルで読み込む場合ってこれで大丈夫でしょうか?

// テキストを取得(例:北海道) var area = $(this).children(':selected').text(); $('.area').each(function(){ // 全て非表示にする(初期化) $(this).addClass('hide'); // '全て'が選択されていれば if(area == '全て'){ // 表示する $(this).removeClass('hide'); // テキスト(例:北海道)が一致していれば }else if($(this).html().match(area)){ // 表示する $(this).removeClass('hide'); } }); });

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2020/12/10 04:13

提示のコードで問題なく動作してますが。 提示以外の部分のコードに問題があるのでは。 症状が再現できるコードの提示をお願いします。
退会済みユーザー

退会済みユーザー

2020/12/10 04:42

タグは上記のままなのですがなんでだ!?(><) >>症状が再現できるコード 少々おまちくださいませ。
退会済みユーザー

退会済みユーザー

2020/12/10 06:28

わざわざありがとうございます。色々触っていて気付いたのですが JSを別ファイルで読み込むとうまく出ません。あとjqueryをhead内に書くとうまくいかないです。 </body>直前に書くと動くのですがこれってなにか原因があるのでしょうか。
guest

回答1

0

ベストアンサー

こんばんは。
すでに別の方が書かれている通り、このサンプルは正常に動作します。
外部ファイルでJavaScriptのファイルを読み込む場合ですが、基本的にjQueryなどのライブラリはhead内で読み込みます。逆に$などを利用したコードは、外部、内部にかかわらずbodyの一番最後に書くのが間違いないと思います。

これは、ブラウザはページを一回で全部読み込むのではなく、上から順に少しずつ読み込むためです。例えば各都道府県のli要素やoption要素の宣言よりも前に$を用いたコードを記述してしまうと、各都道府県のli要素やoption要素がまだ読み込まれていない(ブラウザからするとまだない)のにイベントの設定をしようとします(その結果イベントは設定されません。)
なので、htmlに記述した要素に対するコードを記述するときは</body>の手前に記述するのが無難でしょう。
あるいは、次のいずれかの方法を使えばhead内でも記述することができます。

javascript

1//方法① 2window.addEventListener('load',function(){ 3 //コード 4}); 5//方法② 6$(document).ready(function(){ 7 //コード 8});

これは、最後までページの読み込みが終わってから//コードに書いた内容を実行することを予約するようなコードとなっています。
※この場合でもjQueryなどのライブラリの読み込みはhead内の、かつ自分で記述するコードより前に読み込むのがお作法ですってどこかに書いてあるのを見た気がします。

参考になれば幸いです。

投稿2020/12/18 14:40

mtripg6666tdr

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問