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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

1028閲覧

JavaScriptによるドロップダウンの絞り込み検索

unotalk

総合スコア124

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2018/10/23 22:24

編集2018/10/24 08:37

前提・実現したいこと

以下のコードで絞り込み検索を実装したいと考えています。
https://codepen.io/rustybailey/pen/GJjvYB

ただ、カスタマイズをしたいのですがそのいい方法が思い浮かばず悩んでいます。
ご教示いただけると幸いです。

1.フィルターは3つ用意したい。
・CodePenではフィルターは1つですが、A、B、C、3つ用意したいです。
・単純に3回コードを繰り返して書いてみたのですが、不格好でなにか他にいい方法がないかお聞きしたいです。

2.「または」「かつ」を変更したい
・現状、チェックした要素すべてに一致するものの結果が返ってきますが、どれかに一致するものを結果として返したいです。
・逆にA,B,Cの要素それぞれに対しては「かつ」で結果を返したいです。

以下は、CodePenでのコードを基に自分で作成したコードです。
JavaScriptについては初心者のため、PHPも多少使っていますが、JavaScriptのみでの方法でもPHPを併用した方法でもどちらでも大丈夫です。
ご回答の際は、以下のソースコードを基本にご回答いただけると助かります。

該当のソースコード

html

1<form method="GET" action="<?php echo get_site_url().'/house-makers'; ?>"> 2<div class="row"> 3<?php 4$maker_options = array('施工エリア' => 'area', '取扱い工法' => 'method', '参考坪単価' => 'price'); 5foreach ($maker_options as $key => $maker_option) {?> 6 <div class="col-xs-12 col-sm-12 col-md-12 col-lg-4"> 7 <div class="dropdown-container"> 8 <div class="dropdown-button-<?php echo $maker_option; ?> noselect"> 9 <div class="dropdown-label"><?php echo $key; ?></div> 10 <div class="dropdown-quantity">(<span class="quantity">Any</span>)</div> 11 <i class="fa fa-filter"></i> 12 </div> 13 <div class="dropdown-list" style="display: none;"> 14 <input type="search" placeholder="<?php echo $key; ?>を検索" class="dropdown-search"/> 15 <ul class="ul-dropdown"></ul> 16 </div> 17 </div> 18</div> 19<?php } ?> 20<div class="w-100 p-4"> 21<center><input type="submit" value="検索" class="btn w-50"></center> 22</div> 23</form>

JavaScript

1// Filter Search 2jQuery( document ).ready( function( $ ) { 3$('.dropdown-container').eq(0). 4on('click', '.dropdown-button-area', function () { 5 $('.dropdown-list').eq(0).toggle(); 6}). 7on('input', '.dropdown-search:eq(0)', function () { 8 var target = $(this); 9 var search = target.val(); 10 11 if (!search) { 12 $('.li-dropdown-area').show(); 13 return false; 14 } 15 16 $('.li-dropdown-area').each(function () { 17 var text = $(this).text(); 18 var match = text.indexOf(search) > -1; 19 $(this).toggle(match); 20 }); 21}). 22on('change:eq(1)', '[type="checkbox"]', function () { 23 var numChecked = $('[type="checkbox"]:checked').length; 24 $('.quantity').eq(0).text(numChecked || 'Any'); 25}); 26}); 27 28// JSON of States for demo purposes 29 30var areaCity = [ 31{ name: 'A市', slugArea: 'asi' }, 32{ name: 'B市', slugArea: 'bsi' }, 33{ name: 'C市', slugArea: 'csi' }, 34{ name: 'D市', slugArea: 'dsi' }, 35{ name: 'E市', slugArea: 'esi' }]; 36 37// <li> template 38var areaTemplate = _.template( 39'<li class="li-dropdown-area">' + 40'<label for="<%= slugArea %>">' + 41'<input name="area[]" type="checkbox" value="<%= slugArea %>">' + 42'<%= capName %></label>' + 43'</li>'); 44 45 46// Populate list with states 47jQuery( document ).ready( function( $ ) { 48 _.each(areaCity, function (s) { 49 s.capName = s.name; 50 $('.ul-dropdown').eq(0).append(areaTemplate(s)); 51}); 52} ); 53//# sourceURL=pen.js 54 55jQuery( document ).ready( function( $ ) { 56$('.dropdown-container').eq(1). 57on('click', '.dropdown-button-method', function () { 58 $('.dropdown-list').eq(1).toggle(); 59}). 60on('input', '.dropdown-search:eq(1)', function () { 61 var target = $(this); 62 var search = target.val(); 63 64 if (!search) { 65 $('.li-dropdown-method').show(); 66 return false; 67 } 68 69 $('.li-dropdown-method').each(function () { 70 var text = $(this).text(); 71 var match = text.indexOf(search) > -1; 72 $(this).toggle(match); 73 }); 74}). 75on('change', '[type="checkbox"]', function () { 76 var numChecked = $('[type="checkbox"]:checked').length; 77 $('.quantity').eq(1).text(numChecked || 'Any'); 78}); 79}); 80 81 82var methodType = [ 83{ name: '2×4、2×6', slugMethod: '2x4-2x6' }, 84{ name: '木造軸組', slugMethod: 'wooden' }, 85{ name: '軽量鉄骨', slugMethod: 'light_gauge_steel' }, 86{ name: '重量鉄骨', slugMethod: 'heavy_gauge_steel' }, 87{ name: 'RC', slugMethod: 'rc' }, 88{ name: 'コンクリート系プレハブ', slugMethod: 'concrete-prefub' }, 89{ name: ' 木質系プレハブ', slugMethod: 'wooden-prefub' }, 90{ name: '鉄骨系プレハブ', slugMethod: 'steel-prefub' }]; 91 92 93 94var methodTemplate = _.template( 95'<li class="li-dropdown-method">' + 96'<label for="<%= slugMethod %>">' + 97'<input name="methods[]" type="checkbox" value="<%= slugMethod %>">' + 98'<%= capName %></label>' + 99'</li>'); 100 101jQuery( document ).ready( function( $ ) { 102 _.each(methodType, function (s) { 103 s.capName = s.name; 104 $('.ul-dropdown').eq(1).append(methodTemplate(s)); 105}); 106}); 107 108//# sourceURL=pen.js 109 110 111 112jQuery( document ).ready( function( $ ) { 113$('.dropdown-container').eq(2). 114on('click', '.dropdown-button-price', function () { 115 $('.dropdown-list').eq(2).toggle(); 116}). 117on('input', '.dropdown-search:eq(2)', function () { 118 var target = $(this); 119 var search = target.val(); 120 121 if (!search) { 122 $('.li-dropdown-price').show(); 123 return false; 124 } 125 126 $('.li-dropdown-price').each(function () { 127 var text = $(this).text(); 128 var match = text.indexOf(search) > -1; 129 $(this).toggle(match); 130 }); 131}). 132on('change:eq(2)', '[type="checkbox"]', function () { 133 var numChecked = $('[type="checkbox"]:checked').length; 134 $('.quantity').eq(2).text(numChecked || 'Any'); 135}); 136}); 137 138var priceRange = [ 139{ name: '20万円台', slugPrice: '20' }, 140{ name: '30万円台', slugPrice: '30' }, 141{ name: '40万円台', slugPrice: '40' }, 142{ name: '50万円台', slugPrice: '50' }, 143{ name: '60万円台', slugPrice: '60' }, 144{ name: '70万円台以上', slugPrice: '70' }]; 145 146var priceTemplate = _.template( 147'<li class="li-dropdown-price">' + 148'<label for="<%= slugPrice %>">' + 149'<input name="price[]" type="checkbox" value="<%= slugPrice %>">' + 150'<%= capName %></label>' + 151'</li>'); 152 153jQuery( document ).ready( function( $ ) { 154 _.each(priceRange, function (s) { 155 s.capName = s.name; 156 $('.ul-dropdown').eq(2).append(priceTemplate(s)); 157}); 158}); 159 160//# sourceURL=pen.js

JavaScriptについては初心者で初歩的な質問であれば恐縮です。
よろしくお願いいたします。

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

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

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

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

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

dice142

2018/10/24 04:46

コードにPHPが使われていますが、JavaScriptのみで実現したいという質問でしょうか?
unotalk

2018/10/24 08:17

いえ、JavaScriptのみでなくても問題ありません。JavaScriptについては初心者のため、PHPも使っているだけです。また、この質問に載せているコードは自分でカスタマイズしたもので、CodePenに載っているものとはやや異なりますが、質問に載せているコードを基本に考えていただけると助かります。質問が正確ではなく失礼しました。
dice142

2018/10/24 08:25

であればタグにPHPを追加し、質問文も修正した方が回答を得られやすいかと思います。
unotalk

2018/10/24 08:37

アドバイスありがとうございます。そのように編集しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問