2017-01-05 12 views
0

私は複数のチェックボックスphp jqueryスクリプトで作業していますが、以前にチェックされたチェックボックスの値を保持するのが難しいです。Jqueryフィルターの透過的なチェックの維持方法

現在、車のメイクをフィルタリングして正しいメイクを表示できますが、車のモデルをクリックすると、メイクの値が消えてモデルのみが表示されます。どのように私は車両が価値を保存するのですか?

jQueryのスクリプト

$(document).ready(function(){ 
    $('.makes').on('change',function(){ //on checkboxes check 

     //sending checkbox value into serialize form 
     var hi=$('.makes:checked').serialize(); 
     if(hi){ 
      $.ajax({ 
       type: "POST", 
       cache: false, 
       url: "carfilter.php", 
       data:{make:hi}, 
       success: function(response){ 
        document.getElementById('getdata').style.display = "block"; 
        document.getElementById("getdata").innerHTML = response; 
        $('#result').hide(); 
       } 
      }); 
     } else { 
      document.getElementById('getdata').style.display = "none"; 
      $('#result').show(); 
     } 
    }); 

    $('.models').on('change',function(){ //on checkboxes check 

     //sending checkbox value into serialize form 
     var hi=$('.models:checked').serialize(); 
     if(hi){ 
      $.ajax({ 
       type: "POST", 
       cache: false, 
       url: "carfilter.php", 
       data:{model:hi}, 
       success: function(response){ 
        document.getElementById('getdata').style.display = "block"; 
        document.getElementById("getdata").innerHTML = response; 
        $('#result').hide(); 
       } 
      }); 
     } else { 
      document.getElementById('getdata').style.display = "none"; 
      $('#result').show(); 
     } 
    }); 
}); 

チェックボックス

<div class="panel panel-default"> 
    <div class="panel-heading" role="tab" id="headingfoure"> 
     <a class="collapsed" role="button" data-toggle="collapse" href="#collapseMakes" aria-expanded="false" aria-controls="collapseMakes">Refine By Make</a> 
    </div> 
    <div id="collapseMakes" class="panel-collapse collapse out" role="tabpanel" aria-labelledby="headingfoure"> 
     <div class="panel-body"> 
      <div class="cs-select-model"> 
       <ul class="cs-checkbox-list mCustomScrollbar" data-mcs-theme="dark"> 
       <?php 
        // connect to database 
        include 'config/config.php'; 
        include 'config/opendb.php'; 

        $chkbx = 0; 
        $sql="SELECT make, COUNT(*) as cnt FROM vehicles GROUP BY make ASC"; 
        $rs=$conn->query($sql); 

        $rs->data_seek(0); 
        while($row = $rs->fetch_assoc()) { 
         $chkbx++; 
         echo"<li> 
           <div class='checkbox'> 
            <input type='checkbox' name='makes[]' value='{$row['make']}' id='{$row['make']}' class='makes' /> 
            <label for='{$row['make']}'>{$row['make']}</label> 
            <span>({$row['cnt']})</span> 
            </div> 
           </li>"; 
         } 
        ?> 
        </ul> 
       </div> 
      </div> 
     </div> 
    </div> 
    <div class="panel panel-default"> 
     <div class="panel-heading" role="tab" id="headingfoure"> 
      <a class="collapsed" role="button" data-toggle="collapse" href="#collapseModels" aria-expanded="false" aria-controls="collapseModels">Refine By Model</a> 
     </div> 
     <div id="collapseModels" class="panel-collapse collapse out" role="tabpanel" aria-labelledby="headingfoure"> 
      <div class="panel-body"> 
       <div class="cs-select-model"> 
        <ul class="cs-checkbox-list mCustomScrollbar" data-mcs-theme="dark"> 
        <?php 
         $chkbx = 0; 
         $sql="SELECT model, COUNT(*) as cnt FROM vehicles GROUP BY model ASC"; 
         $rs=$conn->query($sql); 

         $rs->data_seek(0); 
         while($row = $rs->fetch_assoc()) { 
          $chkbx++; 
          echo"<li> 
            <div class='checkbox'> 
             <input type='checkbox' name='models[]' value='{$row['model']}' id='{$row['model']}' class='models' /> 
             <label for='{$row['model']}'>{$row['model']}</label> 
             <span>({$row['cnt']})</span> 
            </div> 
           </li>"; 
         } 
        ?> 
        </ul> 
       </div> 
      </div> 
     </div> 
    </div> 

carfilter.php

<?php 
    // connect to database 
    include 'config/config.php'; 
    include 'config/opendb.php'; 

    $sql="SELECT * FROM vehicles"; 

    if(!empty($_POST['make']) || !empty($_POST['model'])) { 
     $sql.=" WHERE "; 

     if(!empty($_POST['make'])) { 
      //unserialize to jquery serialize variable value 
      $brandis=array(); 
      parse_str($_POST['make'],$makeis); //changing string into array 

      //split 1st array elements 
      foreach($makeis as $manufacturer){ 
       $manufacturer; 
      } 

      $manufacturers=implode("','",$manufacturer); //change into comma separated value to sub array 
      $sql.="make IN ('$manufacturers')"; 

      if(!empty($_POST['model'])){ 
       $sql.=" AND "; 
      } 
     } 
     if(!empty($_POST['model'])) { 
      //unserialize to jquery serialize variable value 
      $modelis=array(); 
      parse_str($_POST['model'],$modelis); //changing string into array 

      //split 1st array elements 
      foreach($modelis as $model){ 
       $model; 
      } 
      $model=implode("','",$model); //change into comma separated value to sub array 
      $sql .="model IN ('$model')"; 
     } 
    } 

    $sql.=" ORDER BY make, year DESC"; 
    $rs=$conn->query($sql); 

    $rs->data_seek(0); 
    $listviewNum = 0; 
    while($rows = $rs->fetch_assoc()) { 
     // // show results 
    } 
+0

セカンダリajax呼び出しでモデルを選択すると、値の配列が返され、現在のモデルが選択され、以前のmake値が選択されます。現在のところ、1つの値しか返さないため、なぜ初期値が失われますか。 – mcv

+0

私はjavascriptがうまくいかない。それはどうしたの?私は最終的に5-6のフィルターを持つつもりです。値を配列に戻すことが最良の方法だと思いますか? – Bulb

+0

私は、既に選択されている古い値を保持しながら、各チェックボックスのフィルタ値を独自の変数でcarfiltersに送る方法を見つけようとしていました。したがって、ユーザーがbmwを選択すると、m3を選択してから赤の色を選択するなどの操作を行うことができます。 – Bulb

答えて

0

を追跡ユーザーが別のフィルタ要求ので、同じようになり、二次値は:

$('.models').on('change',function(){ //on checkboxes check 

     //sending checkbox value into serialize form 
     var hi=$('.models:checked').serialize(); 
     var hi2=$('.makes:checked').serialize(); 
     if(hi){ 
      $.ajax({ 
       type: "POST", 
       cache: false, 
       url: "carfilter.php", 
       data:{model:hi, 
         make:hi2}, 
       success: function(response){ 
        document.getElementById('getdata').style.display = "block"; 
        document.getElementById("getdata").innerHTML = response; 
        $('#result').hide(); 
       } 
      }); 
     } else { 
      document.getElementById('getdata').style.display = "none"; 
      $('#result').show(); 
     } 
    }); 

PHPのコードがすでに他のすべてを占めている表示されます。

+0

私はそれを試していただきありがとうございます。 – Bulb

+0

はいでした。ありがとうございました。コードの冗長性を減らす方法はありますか? jqueryセクションの場合は – Bulb

+0

が最も確実です。 – mcv

関連する問題