2012-04-30 57 views
1

当我单击按钮时,此代码应该清除复选框。它可以工作,如果我删除<form></form>标签,但我认为.find()应该找到所有的后代?jquery .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"/> 
+3

尝试使用,而不是.attr – kinakuta

+2

它的工作显然罚款.prop - http://jsfiddle.net/gYHKA/ –

+1

工作对我来说:HTTP://的jsfiddle .net/CgsEu/ –

回答

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

这个工程,很整洁,谢谢!我认为这是行不通的,因为我试图同时提交一个表格:/ – JYX

+0

虽然第二个想法不能解释为什么当复选框是儿童(1级),但是每当我停止工作时添加任何中间层.....任何想法将是最受欢迎的,但如果没有,哦! – JYX

+0

@ user1199713:在执行代码之前可能会发生'

'提交。如果你向我们展示你的真实*代码,我们可以帮助你。您可能只需要将'e.preventDefault()'添加到您的处理程序来修复它。 –

1

有没有必要使用每个(),你已经拥有的元素的集合,可以将更改应用于所有的人,像这样:

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

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

FIDDLE

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

根据W3C形式说明书中,所检查的属性是 布尔属性,这意味着相应的属性是如果 属性存在于全即使,例如真,属性 没有值或者一个空的字符串值。优选 跨浏览器兼容的方式,以确定是否一个复选框被选中是 检查上使用该元件的特性的“truthy”值的 下列之一:

如果(elem.checked)

如果($(ELEM).prop( “选中”))

如果($(ELEM)。是( “:勾选”))

为了保持向后兼容性,在.attr()方法 jQuery 1.6.1+将检索并更新您的属性,所以没有代码需要将用于布尔属性的更改为.prop()。 尽管如此,检索选中值的首选方法是prop()。

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.

0

使用支柱,例如

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

,而是如果attr

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

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