0

php / sphinx / jqueryを使用して検索エンジンを構築していますが、検索結果のフィルタリングを除いて、ほとんどのエンジンが機能しています。検索結果はフィルター送信ではなく、すべての結果が表示され、チェックボックスがクリックされたときにjqueryを使用して一致しない結果を非表示にしようとしています。

ここでフィドルを作成しましたhttp://jsfiddle.net/LEZAh/

何が機能するか:ボックスをチェックして対応する要素を表示し、別のボックスがチェックされたら、表示を許可されたボックスに追加します。

動作しないもの:複数のチェックボックスをオンにしていて、そのうちの1つをオフにすると、対応する要素が表示されません。

悪い説明で申し訳ありませんが、filldeはそれ自身の感謝のために話します!

4

3 に答える 3

4

上記の優れた投稿(mrtsherman、ahren)に加えて、elseステートメントの最後の行が問題を引き起こしていました。迅速で汚い解決策は次のようになります。

    //$(".ni-search"+checks).show(); //this was the offending line

    $("#cat_"+$(this).attr('id')).hide(); //instead of showing everything just hide what was clicked

私はあなたのフィドルでもこれをうまく実行しました。

于 2012-05-23T04:55:40.497 に答える
1

クリック機能を簡略化しました。

$(document).ready( function () {
   $('.search-option input').click(function(){
      var inputs = $(".search-option input");
      var products = $(".ni-search");

      products.each(function(i){
         if(inputs.eq(i).is(":checked")){
            $(this).show();
         }else{
            $(this).hide();
         }
      });
      if(products.length == inputs.not(":checked").length){
          products.show();  
      }
   });
});​

これは、結果がすべて同じラッパーにあり、チェックボックスもすべて同じラッパーにあることを前提としています。

更新されたjsFiddleへのリンク

于 2012-05-23T04:48:48.660 に答える
1

スクリプトの別の簡略化されたバージョンを次に示します。

http://jsfiddle.net/LEZAh/4/

$('input').change(function() {
    //all checkboxes are unchecked, so show all
    if ($('input:checked').length == 0) {
        $('.ni-search').show();
    }
    else {
        //otherwise only show checked
        $('.ni-search').hide();
        $('input:checked').each(function(index) {
            $('.ni-search').eq(index).show();
        });
    }
});​
于 2012-05-23T04:56:23.427 に答える