2016-08-11 5 views
0

私の旅行しているウェブサイトでは、複数のチェックボックスを使用して検索結果をフィルタリングしたいと思います。現在、私のコードは次のように動作しています。AJAXを使用して複数のチェック済み検索結果フィルタ

「近くの空港」にチェックを付けると、データタグ「空港」のホテルのみが表示されます。しかし、航空港とショッピング街の両方に近いホテルを同時にフィルタリングしたい場合は、機能しません。データタグ「空港」または「ショッピング」を持つホテルのリストを示します。データタグ「空港」と「ショッピング」の両方を持つホテルをリストアップするように変更したいと考えています。

コンテキストにおけるウェブサイトのスクリーンショットhttp://prntscr.com/c49csj

コード

$(document).ready(function(){ 
    $('.category').on('change', function(){ 
     var category_list = []; 
     $('#filters :input:checked').each(function(){ 
     var category = $(this).val(); 
     category_list.push(category); 
     }); 

     if(category_list.length == 0) 
     $('.resultblock').fadeIn(); 
     else { 
     $('.resultblock').each(function(){ 
      var item = $(this).attr('data-tag'); 
      var itemarr = item.split(','); 
      $this = $(this); 
      $.each(itemarr,function(ind,val){ 
      if(jQuery.inArray(val,category_list) > -1){ 
       $this.fadeIn('slow'); 
       return false; 
      } 
      else 
       $this.hide(); 
      }); 
     }); 
     } 
    }); 
    }); 

答えて

0

あなたはcategory_list配列のすべての要素がitemarr配列に利用可能であることを確認する必要があります。ポストHow to check whether multiple values exist within an Javascript arrayは、他のブロックに例えばあなたの問題を解決するため、次のようにコードを変更する必要があります

var item = $(this).attr('data-tag'); 
var itemarr = item.split(','); 
var hideItem = false; 
for(var i = 0 , len = itemarr.length; i < len && !hideItem; i++){ 
    hideItem = ($.inArray(itemarr[i], category_list) == -1); 
    } 
    if(hideItem) { 
    $this.hide(); 
    } else { 
    $this.fadeIn('slow'); 
    } 
+0

推奨ポストが行われるべきかについてのアイデアを提供します。しかし、私は自分のコードセグメントでそれをどのように適用するのか理解できません。 –

+0

編集された回答を参照してください。 – Dhananjay

+0

これは完全に機能しています。あなたのお手伝いをしていただきありがとうございます。 –

関連する問題