2012-04-30 56 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);