如何在pageload上禁用所有未经检查的框?

pea*_*ove 4 jquery

当我的页面加载时,我希望禁用所有未选中的框:

<form action="demo_form.asp" method="get">
  <input type="checkbox" name="vehicle" value="Bike"> I have a bike<br>
  <input type="checkbox" name="vehicle" value="Car" checked> I have a car<br>
  <input type="submit" value="Submit">
</form>
Run Code Online (Sandbox Code Playgroud)

我尝试使用此代码,但它无法正常工作:

  $(document).ready(function(){
        if($(".test").is(':checked'))
            $(".test").attr("disabled", false);
        else
            $(".test").attr("disabled", true);
    });
Run Code Online (Sandbox Code Playgroud)

https://jsfiddle.net/m7ny2Le7/1/

Pra*_*lan 5

您可以使用:not(:checked)筛选未选中的复选框

$(document).ready(function() {
  $(":checkbox:not(:checked)").prop('disabled', true)
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form action="demo_form.asp" method="get">
  <input type="checkbox" name="vehicle" value="Bike">I have a bike
  <br>
  <input type="checkbox" name="vehicle" value="Car" checked>I have a car
  <br>
  <input type="submit" value="Submit">
</form>
Run Code Online (Sandbox Code Playgroud)

您也可以使用prop()回调

$(document).ready(function() {
  $(":checkbox").prop('disabled', function() {
    return !this.checked;
  })
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form action="demo_form.asp" method="get">
  <input type="checkbox" name="vehicle" value="Bike">I have a bike
  <br>
  <input type="checkbox" name="vehicle" value="Car" checked>I have a car
  <br>
  <input type="submit" value="Submit">
</form>
Run Code Online (Sandbox Code Playgroud)

注意:在你的代码中我看不到test类,所以我:checkbox用来引用所有复选框.

  • @PranavCBalan:Jarla在jsfiddle中获得了`test`类.@Jarla:通过使用选择器`$(".test")`你总是使用类`test`来处理所有元素,并且不能区分选中或未选中的复选框. (2认同)
  • @Pekka:根据is()的jQuery文档:`检查当前匹配的元素集对选择器,元素或jQuery对象,如果这些元素中至少有一个与给定的参数匹配,则返回true. (2认同)
  • @Pekka是`$(".test")的主要问题.是(':checked')`是选择器`$(".test")`返回类`test`的所有元素.你不能一次检查多个元素 - 你需要`$(".test").each(function(){})`用类`test`迭代每个单独的元素. (2认同)