2017-03-17 11 views
0

こんにちはこれは私のホテルのプロジェクトです。しかし、私はフィルタに問題があります。 アメニティ列のデータをフィルタリングしたいとします。AngularJS mysql filter複数の要素

です:あなたは、単一のチェックボックスを選択していますが、複数のチェックボックスを選択した場合、それが動作しない場合my fiddle

それは動作します。

問題は私が使用できるものではなく、indexofから発生すると思われます。私はどのような方法に従うべきですか?

この行を変更する方法:indexOf(x);

これが私の悪いコードです:

//PROBLEM FILTER HERE 

$scope.am_en = function() 
{ 
    //get input value 
    x = $(".hosting_amenities input:checkbox:checked").map(function(){return $(this).val();}).get(); 
    //filter 
    $scope.ot_Filter = function (location) { 
     return location.amenities.indexOf(x) !== -1; 
    }; 
} 

答えて

1

問題が実際に機能$scope.am_enによって引き起こされる、内部関数の宣言で$scope.ot_Filter

複数のチェックボックスを選択すると、x変数はオブジェクトの配列なので、ループを実行して、要素を表示するかどうかを確認する変数を作成できますrはありません。

$scope.ot_Filter = function (location) { 
    var shouldBeShown = false; 
     for (var i = 0; i < x.length; i++) { 
      if (location.amenities.indexOf(x[i]) !== -1) { 
       shouldBeShown = true; 
      break; 
     } 
    } 
    return shouldBeShown; 
}; 

をあなたはこのソリューションが正しく動作して見ることができるように私は、あなたのjsfiddleを修正:次のようにあなたはそれを行うことができます。

+0

これは素晴らしいです。私は数日間それを解決しようとしてきました。 – toplumdusmani

+0

部屋にテレビがないと、どうすればすべての部屋を隠すことができますか?フィルタの有無にかかわらずフィルタリングできますか?たとえば:wifiとtvがチェックされている場合テレビに部屋がない場合、結果はnull – toplumdusmani

+0

新しい質問を別の質問として投稿することをお勧めします。コミュニティ全体があなたに解決すべきことがまだあることを認識させるようにします。 – Icarus