Jquery 在内部测试时只允许选中一个复选框

Jquery 在内部测试时只允许选中一个复选框,jquery,loops,checkbox,Jquery,Loops,Checkbox,我有一个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'];

我有一个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++;
}
但它取消了上一行的复选框,并允许我在整个页面中只选择一个复选框。有什么办法可以解决这个问题吗?

您可以对该作业使用.sippines函数,并且不要在同一页面上对dom元素使用相同的Id。它只获取您的第一个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);
});

您的代码运行良好,只需将选择器替换为类$'input.q'

但若要允许每行仅选择一个复选框,且所有复选框的名称相同,则需要如下代码,该代码将取消选中同一div中的所有复选框,然后选中更改的复选框

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

我仍然可以检查同一行上的几个值。但我只需要允许用户检查一个。这意味着,如果他已经选中了1并单击了2,则1未选中。我删除了id并改为类alsook,那么上面的代码应该可以正常工作,除非您的html上有不同的结构。兄弟“input”的作用是,当您单击一个输入时,它会选择父div中的所有输入。因此,除了您单击的输入之外,应该取消选中div中的所有输入。除此之外,您还插入了一个控制台日志,如果它在if语句中。如果你没有测试它并给出反馈,请完成一半。它不允许用户在同一行上检查多个值,但是当我想检查下一行时,它会取消选中前一行的值。因此,它只允许我选中一个复选框您需要在复选框名称中添加递增的数字,一旦每行复选框名称是唯一的,代码将正常工作!你的意思是我需要在php代码中完成吗?还是在js代码中?如果每行的名称不同,我将如何提交表单。检查更新的答案,它将允许您以相同的名称获得所需的行为!
$('input.q').on('change', function() { 
    $(this).parents('.full_qst').find(".q[name='"+$(this).attr("name")+"']").not(this).prop('checked',false); 
});