即使在添加attr后也允许检查复选框("选中",false)

时间:2017-03-03 09:20:52

标签: jquery checkbox

我不确定是否正确制定了标题,但逻辑是这样的。

我有4个复选框, 3是 1否。选择3 将取消选中并选择将取消选中

我的jQuery如下:

var yes = $("input[type=checkbox].yes");

if (yes.length == yes.filter(":checked").length) {
    $("#no").attr("checked", false);
} else if($("#no").is(":checked")) {
    yes.attr("checked", false);
} else {
    // do nothing
}



有用。但是,如果我选中了所有,我就无法选择。相反,我需要取消选中1 来选择也是如此。如果我检查,则取消选中所有。但是,我需要取消选中才能再次选择

如果选中所有,我是否仍然可以选择

谢谢!

更新
现在包括HTML

<form id="checkbox-testing" >
<div class="checkform">
    <label>                        
      <input class="yes" type="checkbox" value="Yes, 1" id="yes1"><span>&nbsp;Yes, 1</span> 
    </label>
    <label>                        
      <input class="yes" type="checkbox" value="Yes, 2" id="yes2"><span>&nbsp;Yes, 2</span>
    </label>
    <label>                        
      <input class="yes" type="checkbox" value="Yes, 3" id="yes3"><span>&nbsp;Yes, 3</span>
    </label>
    <label>                        
      <input type="checkbox" value="No" id="no"><span>&nbsp;No</span>
    </label>
</div>
<input type="submit" value="Test" />
</form>

1 个答案:

答案 0 :(得分:0)

使用.prop()来测试已检查的属性,而不是.attr() - 以下代码片段使用.prop然后使用.change()事件 - 在这种情况下,我只是在构造输出但是你可以改变另一个复选框的道具。

编辑 - 我刚刚更新了我的答案,让一个无线电按钮选择或另一个选项和一个按钮来清除点击的已检查属性。

&#13;
&#13;
$(document).ready(function(){
  $("input[type=radio]").change(function(){;
    console.log("yes: " + $(".yes").prop("checked"));
    console.log(" no: " + $(".no").prop("checked"));
  })
  
  $('#clear').click(function(){
    $("input[type=radio]").prop('checked',false)
  })
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label for ="yes">Yes
  <input type ="radio" name ="test" id="yes" class="yes" checked value"yes"/></label>
<label for ="no">No
  <input type ="radio" name ="test" id="no" class="no" value = "no"/>
  <hr/>
  
  
  <button type ="button" name ="test" id="clear" >Clear Value</button>
&#13;
&#13;
&#13;

var yes = $("input[type=checkbox].yes");

if (yes.length == yes.filter(":checked").length) {
    $("#no").prop("checked", false);
} else if($("#no").is(":checked")) {
    yes.prop("checked", false);
} else {
    // do nothing
}