2017-06-13 59 views
0

我有一个while循环只有一个测试复选框,我从数据库中获取数据:允许检查内部,而

while($row = mysqli_fetch_array($skillsResult)) 
{  

    $id = $row['id']; 
    $driver = $row['driver']; 
    $subdriver = $row['subdriver']; 
    $dep = $row['department']; 
    $skill = $row['skills']; 
    $vrgood = $row['4']; 
    $good = $row['3']; 
    $middle = $row['2']; 
    $low = $row['1']; 
?> 

<br/><br/> 
<fieldset> 
<legend id="q1" class="desc notranslate"> 
    <?php echo $no++; ?> 
</legend> 
<div class="full_qst"> 
    <div class="drvr"> <?php echo $driver; ?> </div><span class="divider">|</span> 
    <div class="sbd_drvr"> <?php echo $subdriver; ?> </div><span class="divider">|</span> 
    <div class="qst"> <?php echo $skill; ?> </div> 

    <div class="mrk"> 
     <span> 
      <label class="choice" for="q1_a" > 
      <input class="q" name="q1_a[]" type="checkbox" value="<?php echo $low ?>" /> 
      1</label> 
     </span> 
     <span> 
      <label class="choice" for="q1_a" > 
      <input class="q" name="q1_a[]" type="checkbox" value="<?php echo $middle ?>" /> 
      2</label> 
     </span> 
     <span> 
      <label class="choice" for="q1_a" > 
      <input class="q" name="q1_a[]" type="checkbox" value="<?php echo $good ?>" /> 
      3</label> 
     </span>  
     <span> 
      <label class="choice" for="q1_a" > 
      <input class="q" name="q1_a[]" type="checkbox" value="<?php echo $vrgood ?>" /> 
      4</label> 
     </span> 
    </div> 
</div> 
</fieldset> 
<?php 
$count++; 
} 

我避开15条记录。我想要的是允许用户单独检查每一行的复选框,并允许他们只检查同一行上的框。 因此,而不是这样的: enter image description here

我想这一点:enter image description here

我试图实现这一点:

$('.mrk input#q').on('change', function() { 
    if($(this).is(':checked')){ 
     $(':checkbox[name="' + $(this).prop('name') + '"]').not($(this)).prop('checked',false); 
    } 
}); 

但取消选择在上线之前的框,让我只能选择整个页面中的一个复选框。有没有办法解决它?

回答

1

你的代码是工作的罚款只是$('input.q')类替代选择

但只允许对于所有复选框,每行选中一个复选框具有相同的名称将需要下面的代码,它将取消选中同一div内的所有复选框,然后检查更改后的复选框。

$('input.q').on('change', function() { 
    $(this).parents('.full_qst').find(".q[name='"+$(this).attr("name")+"']").not(this).prop('checked',false); 
}); 
+0

工作一半。它不允许用户检查同一行上的多个值,但是当我不想检查下一个值时,它会取消选中前一行的值。所以它允许我只检查一个复选框 –

+0

您需要在复选框名称中添加增加的数字,每行一次复选框名称是唯一的,代码将正常工作! –

+0

你的意思是我需要在php代码中做到这一点吗?或内部的JS代码?那么我将如何提交表格,如果每行的名称不同。 –

0

您可以使用该作业的.siblings()函数,并且从不在同一页面上为dom元素使用相同的Id。它只会得到你的第一个ID,并不会看到其他人。

$('.mrk input').on('change', function() { 
    if($(this).is(':checked')){ 
     $(this).siblings('input').prop('checked',false); 
    }else 
     $('.mrk input').prop('checked',false); 
}); 

如果没有需要检查,如果这个检查你甚至可以用

$('.mrk input').on('change', function() { 
     $(this).siblings('input').prop('checked',false); 
}); 
+0

我仍然可以检查同一行上的几个值。但我需要允许用户只检查一个。这意味着如果他已经选中了1并点击了2,那么1就没有选中。我删除了ID并更改为类也 –

+0

好吧,那么上面的代码应该工作正常,除非你有不同的结构在你的HTML。兄弟姐妹('输入')做的是,当你点击一个输入时,它选择父div中的所有输入。所以这应该取消选中div中所有的输入,除了你点击的输入。除此之外,如果在if语句内部插入控制台日志。如果你没有测试它并给出反馈,请 – necilAlbayrak