人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

jQuery、Ajax、PHPを使って、データを絞り込んで表示する方法を教えていただけないでしょうか?
/*or検索*/
<input type="checkbox" name="country_id[]" value="1" id="CountryId1" />日本
<input type="checkbox" name="country_id[]" value="2" id="CountrdIs2" />アメリカ
<input type="checkbox" name="country_id[]" value="3" id="CountryId3" />アジア

/*and検索*/
<input type="checkbox" name="dgenre_id[]" value="1" id="GenreId1" />アクション
<input type="checkbox" name="genre_id[]" value="2" id="GenreId2" />ドラマ
<input type="checkbox" name="genre_id[]" value="3" id="GenreId3" />ホラー

/*データ表示部分*/
<section id="movieList" class="group">
<img src="/eigazuki/img/poster/1.jpeg"/>
<img src="/eigazuki/img/poster/2.jpeg"/>
を含め100件の画像を表示しています。
</section>


作業の流れとしては、
100件の画像の中から、チェックボックスの(国はアメリカで、ジャンルがアクションとホラーな作品)valut値に一致した画像のみを表示。

「検索ボタンを押してから画像を表示させる処理」は出来るのですが、それをボタンを押さずにリアルタイムで行いたいのです。
2.3日考え、調べたのですが全くのお手上げです。
どなたか、アドバイスは参考になるサイトを教えていただけると幸いです。

●質問者: ぱんたま
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● Cherenkov
●200ポイント ベストアンサー
<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8">
 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
 <script>
 $(function() {
 $('input:checkbox').change(function() {
$('#listBlock01 section').css('display', 'none');
var checked = {country_id:[], genre_id:[]};
var c = $('input:checkbox:checked');
if (!c.length) return;
c.each(function(){
var name = this.name.replace('[]','');
var value = this.value;
var tmp = 'input:hidden[name*="' + name + '"][value="' + value + '"]';
checked[name].push(tmp);
});
checked.country_id = checked.country_id.length ? ':has(' + checked.country_id.join(',') + ')' : '';
checked.genre_id = checked.genre_id.length ? ':has(' + checked.genre_id.join('+') + ')' : '';
var ss = 'section' + checked.country_id + checked.genre_id;
$(ss).css('display', 'inline')
 });
 });
 </script>
 <style>
 #listBlock01 section {
 display: none;
 }
 </style>
 </head>
 <body>
 or検索
<input type="checkbox" name="country_id[]" value="1" />日本
<input type="checkbox" name="country_id[]" value="2" />アメリカ<br>
 and検索
<input type="checkbox" name="genre_id[]" value="1">アクション
 <input type="checkbox" name="genre_id[]" value="2">ドラマ
 <div class="unitMovie group" id="listBlock01">
 <section class="innr group">
 <h1 class="image slideUp">
 <a href="/eigazuki/view/1" target="_blank" title="イーグル・アイ">
 <img alt="イーグル・アイ" class="capture" height="253" src="/eigazuki/img/poster/1.jpeg" width="180" />
 </a>
 </h1>
 <p class="tagline balloon04">それは全てを見ている。しかし、その姿は決して見えない。</p>
 <input type="hidden" name="data[Movie][country_id]" value="2"/>
 <input type="hidden" name="data[Movie][genre_id]" value="1"/>
 </section>
 <section class="innr group">
 <h1 class="image slideUp">
 <a href="/eigazuki/view/2" target="_blank" title="とっとこハム次郎">
 <img alt="とっとこハム次郎" class="capture" height="253" src="/eigazuki/img/poster/2.jpeg" width="180" />
 </a>
 </h1>
 <p class="tagline balloon04">ハムハ?。</p>
 <input type="hidden" name="data[Movie][country_id]" value="1"/>
 <input type="hidden" name="data[Movie][genre_id]" value="1"/>
<input type="hidden" name="data[Movie][genre_id]" value="2"/>
 </section>
 </div>
 </body>
</html>

適当(逃げ道)


参考:Jqueryのfindでand検索or検索 - [Swb:]渋谷に住むWEBデザイナの備忘録


ぱんたまさんのコメント
質問では文字数のせいもあり、少し省いております。本当は >|| <div class="unitMovie group" id="listBlock01"> <section class="innr group"> <h1 class="image slideUp"><a href="/eigazuki/view/1" target="_blank" title="イーグル・アイ"><img src="/eigazuki/img/poster/1.jpeg" width="180" height="253" alt="イーグル・アイ" class="capture" /></a></h1> <p class="tagline balloon04">それは全てを見ている。しかし、その姿は決して見えない。</p> </section> <!-- /.unitService --></div> ||< というコードを書いて画像を表示しております。 >>>idが付属してないということなんですが、 hiddenで画像のジャンルidや国idを付属させた方が処理を書きやすいのでしょうか?

Cherenkovさんのコメント
回答を編集しました。 コード貼り付けは以下のサービスを利用するとよいです。 https://gist.github.com/ http://jsfiddle.net/ 質問文のコードでは必要な条件が確認できなかっただけです。 or検索、and検索の条件についても不明なのでカットしました。

Cherenkovさんのコメント
http://q.hatena.ne.jp/1334910049#c236450 このアドバイスは読みましたか? 提示されたコードだと全てクライアントサイドで完結する感じで、Ajax,PHPは関係なさそうですが。

ぱんたまさんのコメント
ありがとうございます。ほんとうに助かります! 国の検索では「or検索=アメリカや日本を含んでいる作品のみを表示する」を採用し、 ジャンル検索では「and検索」で「アクションとドラマを含んだ作品のみを表示するよう」絞り込んでいます。

Cherenkovさんのコメント
これまでのコードでは、"含んでいる"かどうかを判定する方法がわかりません。 回答のコードでは、「view/2」というvalueに関連がありそうな値を適当にキーとして選んでますが…

ぱんたまさんのコメント
>>http://q.hatena.ne.jp/1334910049#c236450 についてですが、自分でも調べた結果 http://p.tl/V5ds のサイトにいきつきましたもので、「Ajax」を利用しないといけないのかなと思いました。 jJavaScriptでのサンプルをみつけることができなかったのもありますが。

Cherenkovさんのコメント
ajax(phpから結果をもらうところ)を利用するかどうかは、ぽんたまさんがどうしたいかによります。 検索結果をサーバサイドから受け取りたい場合はajax。 条件にあった要素を表示するだけなら回答1のようになると思います。

Cherenkovさんのコメント
ぱんたまさんですね失礼しました。

ぱんたまさんのコメント
教えていただいたコードで作業を進めたのですが、 >|| a[href$="/view/' + this.value + '"] ||< となっているせいか http://localhost/eigazuki/view/作品id が1と2の作品しか出てこないですね。

Cherenkovさんのコメント
href$=はhrefの値が「/view/id」で終わってるものしかマッチしませんからね。 inputのvalueとaのhrefを見直すかコードを提示。

ぱんたまさんのコメント
>|| <div class="unitMovie group" id="listBlock01"> <section class="innr group"> <h1 class="image slideUp"> <a href="/eigazuki/view/1" target="_blank" title="イーグル・アイ"> <img alt="イーグル・アイ" class="capture" height="253" src="/eigazuki/img/poster/1.jpeg" width="180" /> </a> </h1> <p class="tagline balloon04">それは全てを見ている。しかし、その姿は決して見えない。</p> //付属のジャンルidを表示する <input type="hidden" name="data[Movie][genre_id]" value="1" id="MovieGenreId"/> <input type="hidden" name="data[Movie][genre_id]" value="4" id="MovieGenreId"/> </section> ||< と付属のジャンルidを表示できるようにしました。 これらと選択したチェックボックスを一致させたいのですが、できますでしょうか?

Cherenkovさんのコメント
修正しました。"国"と"ジャンル"同士の条件はorにしてあります。

ぱんたまさんのコメント
夜遅くまでほんとうにありがとうございます。 条件に一致した作品のみを表示することはできたのですが、新たな問題が発生しました。それは、一致した作品たちがきれいに並んでくれないことです。 http://www.kanzen21.com/actress/ のようにきれいに並ばずに、一致しない作品のみが穴抜けしてガタガタした状態になってしまいます。

Cherenkovさんのコメント
しらんがな。ソースを見ないと答えられませんー。

Cherenkovさんのコメント
条件に一致したsection要素を表示/非表示にしてるのでそのへんを確認・変更してみては

ぱんたまさんのコメント
いただいたコードを基にあとは、こちらで試行錯誤していきます。 ほんとうに参考になりました!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ