jquery .find()无效

时间:2012-04-30 15:39:27

标签: javascript jquery

单击按钮时,此代码应清除复选框。如果删除<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"/>

5 个答案:

答案 0 :(得分:2)

此代码适用于我:http://jsfiddle.net/CgsEu/

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

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

DEMO:http://jsfiddle.net/CgsEu/1/

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

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

DEMO:http://jsfiddle.net/CgsEu/2/

答案 1 :(得分:1)

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

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

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

FIDDLE

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

  

根据W3C表单规范,checked属性为a   boolean属性,表示相应的属性为true   该属性完全存在 - 即使例如属性   没有值或空字符串值。首选   跨浏览器兼容的方式来确定是否选中了复选框   使用以下方法之一检查元素属性的“truthy”值   以下内容:

     

if(elem.checked)

     

if($(elem).prop(“checked”))

     

if($(elem).is(“:checked”))

     

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

答案 2 :(得分:1)

$(document).ready(function(){
  var clearCheckboxes = function() {    
      $('.outerbox').find('input[type="checkbox"]').each(function(){
          $(this).prop('checked', false);
      });
  }

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

DEMO.

<强>更新

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

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

DEMO.

答案 3 :(得分:0)

使用prop,例如

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

而不是attr

答案 4 :(得分:0)

var clearCheckboxes = function() {    
  $('input[type="checkbox"]', '.outerbox').prop('checked', false);
}

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