2017-12-26 5 views
0

私はPHPで生成されたチェックボックスの配列を持っています。私は、他のユーザーによる以前の選択のためにすべてのチェックボックスを表示することはできません。3つのPHP変数に基づいて配列内の選択可能なチェックボックスを制限します(最大1列、10行、15合計)

for($i=0;$i<$maxrows;$i++) 
{ 
    $already_selected[$i]=0; 
    for($a=0;$a<$maxcols;$a++) 
    { 
     $value=$mat[$i][$a]; 
     if($value>0) 
     { 
     echo"<input type='checkbox' name='arr[$i][$a]' value='$uid'/>"; 
     } 
     else 
     { 
     echo"<input type='hidden' name='arr[$i][$a]' value='$value'/>"; 
     $already_selected[$i]+=1; 
     } 
    } 
} 

私は(私のために、少なくとも)で選択可能なチェックボックスを制限する必要がある複雑な方法:ユーザーが選択できるようにする必要があり : - 各列の一つのチェックボックス最大 - あたりの最大$ xにチェックボックスを(ここでxはphpによって次のように計算されます:$ maximum_per_row - $ already_selected) - グリッド全体の最大$ yチェックボックス(yは前のページで受け取ったphp変数です)。

可能ですか?

は多分何かのように:明らかに動作しません

echo" 
     <script type='text/javascript'> 
      var limit = $y; 
      $('input.ggrid').on('change', function(evt) 
      { 
      if($('input[class='ggrid']:checked').length >= limit) 
      { 
       this.checked = false; 
      } 
      }); 
     </script> 
"; 
for($i=0;$i<$maxrows;$i++) 
{ 
    echo" 
     <script type='text/javascript'> 
      var limit = $maximum_per_row[$i] - $already_selected[$i]; 
      $('input.row$i').on('change', function(evt) 
      { 
      if($('input[class='row$i']:checked').length >= limit) 
      { 
       this.checked = false; 
      } 
      }); 
     </script> 
    "; 
    for($a=0;$a<$maxcols;$a++) 
    { 
     echo" 
     <script type='text/javascript'> 
      var limit = 1; 
      $('input.col$a').on('change', function(evt) 
      { 
      if($('input[class='col$a']:checked').length >= limit) 
      { 
       this.checked = false; 
      } 
      }); 
     </script> 
     "; 
    } 
} 
for($i=0;$i<$maxrows;$i++) 
{ 
    $already_selected=0; 
    for($a=0;$a<$maxcols;$a++) 
    { 
     $value=$mat[$i][$a]; 
     if($value>0) 
     { 
     echo"<input type='checkbox' class='col$a row$i ggrid'name='arr[$i][$a]' value='$uid'/>"; 
     } 
     else 
     { 
     echo"<input type='hidden' name='arr[$i][$a]' value='$value'/>"; 
     $already_selected+=1; 
     } 
    } 
} 

... は、事前にありがとうございます!

+0

Javascript/jQueryですべての作業を完了する必要があります。 – Phil

+0

私にとってより簡単に言われました...私はjqueryの新人ではありません...:P私は一見、ありがとう – TheKillerCH

+0

こんにちは、私は1列あたり最大1は、目に見えるチェックボックス?さもなければ、これを満たすために隠された '$ already_selected'を制御することはできません。 – Phil

答えて

0

次のコードを参照してください。 PHPと純粋なJavaScript、jQueryはありません。

<?php 

$maxrows=4; //example, you could replace it with your value 
$maxcols=8; //example, you could replace it with your value 
$y=1;  //example, you could replace it with your value 
$x=array(); 

for($i=0;$i<$maxrows;$i++) 
{ 
    $already_selected[$i]=0; 
    $test_symbol=1; //value to let half of the inputs are hidden for example, you could delete it 
    for($a=0;$a<$maxcols;$a++) 
    { 
     //$value=$mat[$i][$a]; 
     $test_symbol=$test_symbol==1?-1:1; 
     $value=$a*$test_symbol; //as example, you could replace it with your value 
     $uid=$a; //as example 
     if($value>0) 
     { 
      echo"<input type='checkbox' id='arr_".$i."_".$a."' name='arr_".$i."_".$a."' value='$uid'/ onclick='check_limit($i,$a)'> \n"; 
     } 
     else 
     { 
      echo"<input type='hidden' name='arr_".$i."_".$a."' value='$value'/> \n"; 
      $already_selected[$i]+=1; 
     } 
    } 
    echo "$i row selected:".$already_selected[$i]."\n <br>"; 
    $x[$i] = $maxcols-$already_selected[$i]-$y; 

} 

?> 

<script language="javascript"> 
var row_limit = <?php echo json_encode($x) ?>; 

var maxrows = <?php echo $maxrows ?>; 
var maxcols = <?php echo $maxcols ?>; 

function check_limit(row,col){ 

    //row control, max allowd by array calculated from PHP 
    for(i = 0; i < maxrows; i++){ 
     tempSelected = 0; 

     for(j=0;j<maxcols;j++){ 
      if(document.getElementById("arr_"+i+"_"+j)){ 
       if(document.getElementById("arr_"+i+"_"+j).checked){ 
        tempSelected++; 
       } 
      } 
     } 
     if(tempSelected>row_limit[i]){ 
      alert("Maximum " + row_limit[i] + "per row allowed!"); 
      document.getElementById("arr_" + row + "_" + col).checked=false; 
      return; 
     } 
    } 

    //column control, max 1 allowed for each column 
    for(j=0;j<maxcols;j++){ 
     tempSelected = 0; 

     for(i=0;i<maxrows;i++){ 
      if(document.getElementById("arr_"+i+"_"+j)){ 
       if(document.getElementById("arr_"+i+"_"+j).checked){ 
        tempSelected++; 
       } 
      } 
     } 
     if(tempSelected>1){ 
      alert("Maximum 1 per column allowed!") 
      document.getElementById("arr_"+row+"_"+col).checked = false; 
      return; 
     } 
    } 


} 
</script> 
関連する問題