質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

5500閲覧

onclick時にaddClassが効かない

tarao

総合スコア28

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/12/15 10:24

html内で表示されているリストの表示を、検索の入力内容によって変動させたいのですが、jqueryのonclick時にaddClassが効いてくれません。

$('.serch-btn').click(function(){}
の外で、$('.animal li').addClass('hidden');を実行すると、
うまくいきます。

下のコードで、何かおかしい部分ありますでしょうか?
ご教示ください。

html

1<body> 2 <div class="container"> 3 <form> 4 <div class="input-group"> 5 <input type="text" class="form-control serch" placeholder="検索"> 6 <span class="input-group-btn"> 7 <button class="btn btn-default serch-btn" type="submit"> 8 <i class='glyphicon glyphicon-search'></i> 9 </button> 10 </span> 11 </div> 12 </form> 13 <ul class="animal"> 14 <li></li> 15 <li></li> 16 <li></li> 17 <li></li> 18 <li>ネズミ</li> 19 </ul> 20 21 <div class="list"> 22 </div> 23 24 25 </div> 26 27</body>

js

1$(function(){ 2 $('.serch-btn').click(function(){ 3 4 var serch = $(".serch"); 5 searchText = serch.val(); 6 7 $('.animal li').each(function() { 8 9 var targetText = $(this).text(); 10 11 // 検索対象となるリストに入力された文字列が存在するかどうかを判断 12 if (targetText.indexOf(searchText)) { 13 // alert(sertchText); 14 $('.animal li').removeClass('hidden'); 15 } else {//存在する 16 alert(sertchText); 17 $('.animal li').addClass('hidden'); 18 } 19 }); 20 }); 21 22}); 23

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

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

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

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

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

guest

回答3

0

ベストアンサー

あまり弄りすぎると混乱すると思いますので、提示されたコードを最低限の部分調整して動作するようにしてみました。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .hidden { display: none; } </style> </head> <body> <div class="container"> <form> <div class="input-group"> <input type="text" class="form-control serch" placeholder="検索"> <span class="input-group-btn"> <!-- type="submit"をtype="button"に変更 --> <button class="btn btn-default serch-btn" type="button"> <i class='glyphicon glyphicon-search'></i> </button> </span> </div> </form> <ul class="animal"> <li>豚</li> <li>牛</li> <li>犬</li> <li>猫</li> <li>ネズミ</li> </ul> <div class="list"> </div> </div> <script src="https://code.jquery.com/jquery-1.11.2.js"></script> <script> $(function(){ $('.serch-btn').click(function(){ var serch = $(".serch"); searchText = serch.val(); $('.animal li').each(function() { var list = $(this); // 追加 var targetText = list.text(); // 変更 // 検索対象となるリストに入力された文字列が存在するかどうかを判断 if (targetText.indexOf(searchText) !== -1) { // 変更 list.removeClass('hidden'); // 変更 } else {//存在する list.addClass('hidden'); // 変更 } }); }); }); </script> </body> </html>

変更内容はソース内のコメントに記載しています。

変更内容に関して疑問などありましたら返答可能な範囲で答えさせていただきます。

投稿2017/12/15 10:42

sdmilieu

総合スコア73

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

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

tarao

2017/12/15 11:05

ありがとうございます。 教えていただいた通り、記述したら一瞬思い通りの表示になるのですが、 そのあとすぐ戻ってしましました。 これは再読み込みされているのでしょうか...
sdmilieu

2017/12/15 11:13

おそらく再読込されてしまっているのかと思います。URLに「?」が追加されてたりしないでしょうか? `button`要素の`type`を`submit`から`button`へ変更されましたか? ``` <!-- 以下のようにtype="button"と記述する --> <button class="btn btn-default serch-btn" type="button"> ``` type="button"にしたにも関わらず現在の状況であれば、formタグが原因の可能性があります。formタグを一度取り除いてみてください
tarao

2017/12/15 11:18

ありがとうございます! buttonにしたら、きちんと表示することができました。 本当にありがとうございます。 あとひとつ聞いてもよろしいでしょうか?? 下記で絞り込みをした箇所に<a>タグをつけることは可能でしょうか? なんども聞いてしまって申し訳ないです。 if (targetText.indexOf(searchText)!= -1) { list.removeClass('hidden'); } else { list.addClass('hidden'); }
sdmilieu

2017/12/15 11:23

aタグをつける件ですが <ul class="animal"> <li><a href="url">豚</a></li> <li><a href="url">牛</a></li> <li><a href="url">犬</a></li> <li><a href="url">猫</a></li> <li><a href="url">ネズミ</a></li> </ul> のようにHTMLに元からaタグをつけていても動作します。 このようにHTMLに元からaタグをつけておく方法ではいけないのでしょうか?
tarao

2017/12/15 11:30

あ、そうですよね!すいません。 もとはcsvデータをajaxで取得して、成功した時にリストをappendToで生成していたのですが、その時にaタグをつければよいのですね! 何度もありがとうございます!!
guest

0

全体にいろいろおかしなコードです。

  • targetText.indexOf(searchText)は、見つからなかったときに-1、見つかれば位置の値(0にもなる)を返します。「見つかったかどうか」を判定したい場合には、!== -1の比較が必要です。
  • $('.animal li').addClassのようにすると、該当する要素全部を操作してしまいます。eachの中なので、$(this)で対象を絞っておきましょう。

投稿2017/12/15 10:36

maisumakun

総合スコア145184

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

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

tarao

2017/12/15 11:12

ありがとうございます。 全然きちんとした知識がなく... おしえていただいた記述に修正したのですが、一瞬だけきちんと表示されて、すぐ絞る前の表示に戻ってしまいました,,,,
guest

0

js

1 if (targetText.indexOf(searchText)) { 2 $(this).removeClass('hidden'); 3 } else { 4 $(this).addClass('hidden'); 5 }

かな

投稿2017/12/15 10:40

KazuhiroHatano

総合スコア7804

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

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

tarao

2017/12/15 11:13

回答ありがとうございます! thisに変えました。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問