1

当我单击按钮时,此代码应清除复选框。如果我删除<form></form> 标签,它会起作用,但我认为.find()应该找到所有后代?

<script type="text/javascript">
$(document).ready(function(){

      var clearCheckboxes = function() {    
        $('.outerbox').find('input').each(function() {
          $(this).attr('checked', false);
        });
      }

      $('input.myButton').click(clearCheckboxes);
});
</script>

<div class="outerbox">    
  <form>
    <input type="checkbox" checked="" /> checkbox1
    <input type="checkbox" checked="" /> checkbox2
  </form>    
</div>
<input class="myButton" value="clear checkboxes now" type="button"/>
4

5 回答 5

2

这段代码对我来说很好:http: //jsfiddle.net/CgsEu/

无论如何,如果您使用的是最新的 jQuery,请尝试更改.attr.prop. .each也不需要 。.attr.prop处理 jQuery 对象中的所有元素。

var clearCheckboxes = function() {    
    $('.outerbox').find('input').prop('checked', false)
}

演示:http: //jsfiddle.net/CgsEu/1/

如果还有其他输入,请尝试将其限制.find为复选框。

var clearCheckboxes = function() {    
    $('.outerbox').find('input:checkbox').prop('checked', false)
}

演示:http: //jsfiddle.net/CgsEu/2/

于 2012-04-30T15:43:55.493 回答
1

没有必要使用 each(),你已经有一个元素的集合,并且可以将更改应用于所有元素,如下所示:

var clearCheckboxes = function() {    
    $('input', '.outerbox').attr('checked', false);
}

$('input.myButton').click(clearCheckboxes);

小提琴

有很多建议使用 prop() 而不是 attr(),这可能是合理的建议。

根据 W3C 表单规范,checked 属性是一个布尔属性,这意味着如果该属性完全存在,则相应的属性为真——即使该属性没有值或空字符串值也是如此。确定是否选中复选框的首选跨浏览器兼容方法是使用以下方法之一检查元素属性上的“真实”值:

if ( elem.checked )

if ( $(elem).prop("checked") )

if ( $(elem).is(":checked") )

为了保持向后兼容性,jQuery 1.6.1+ 中的 .attr() 方法将为您检索和更新属性,因此不需要将布尔属性的代码更改为 .prop()。然而,检索检查值的首选方法是 prop()。

于 2012-04-30T15:42:41.463 回答
1
$(document).ready(function(){
  var clearCheckboxes = function() {    
      $('.outerbox').find('input[type="checkbox"]').each(function(){
          $(this).prop('checked', false);
      });
  }

  $('input.myButton').click(clearCheckboxes);
});​

演示。

更新:

$('.outerbox').find('input[type="checkbox"]').prop('checked', false);

或者

$('.outerbox input:checkbox').prop('checked', false);

演示。

于 2012-04-30T15:43:32.870 回答
0

使用道具,例如

$(this).prop('checked', false);

相反,如果attr

于 2012-04-30T15:45:31.047 回答
0
var clearCheckboxes = function() {    
  $('input[type="checkbox"]', '.outerbox').prop('checked', false);
}

$('input.myButton').click(clearCheckboxes);
于 2012-04-30T15:50:15.050 回答