2011-08-26 174 views
2

我正在使用jquery 1.6.1來檢查所有的複選框。
這是我的HTML代碼:我checkAll複選框腳本不工作

<form action=""> 
    <div class="stats"> 
     <h2 class="title">Reason for Celebrity</h2> 
     <input name="reason" type="checkbox" value="net" />Famous on the internet<br/> 
     <input name="reason" type="checkbox" value="crim" />Committed a crime<br /> 
     <input name="reason" type="checkbox" value="model" />Dates a super model<br /> 
     <input name="reason" type="checkbox" value="tv" />Hosts a TV show<br /> 
     <input name="reason" type="checkbox" value="japan" />Big in Japan<br /> 
     <hr /> 
     <input class="check-all" name="reason" type="checkbox" /><span>Check all</span> 
     <br/> 
     <input type="submit" value="Submit" class="submit" /> 
    </div> 
    </form> 

和我的check腳本都是這樣的:

$(document).ready(function(){ 
    $('.check-all:checkbox').change(function() { 
    var group = ':checkbox[name=' + $(this).attr('name') + ']'; 
    $(group).attr('checked', $(this).attr('checked')); 
    }); 
}); 

但這對複選框取消選中的不行。你能幫我解決這個問題嗎?

回答

3

嘗試更換

$(group).attr('checked', $(this).attr('checked')); 

$(group).attr('checked', $(this).is(':checked')); 
0

$(this).attr('checked') - 返回undefined

你應該這樣做:

var variable = (undefined == $(this).attr('checked'))?false:$(this).attr('checked'); 
$(group).attr('checked', variable); 

爲了避免未定義值

+0

感謝。但是爲什麼$(this).attr('checked')返回** false **取消選中全選複選框 –

+0

因爲可能的值是真的,所以我知道它們是false和'checked'。 true和'checked'具有相同的含義。 –

0

問題是您沒有明確添加任何選項來取消選中複選框。 一個做到這一點適當的方式將

$(document).ready(function(){ 
    $('.check-all:checkbox').change(function(event) { 
    var group = ':checkbox[name=' + $(this).attr('name') + ']'; 
     $(group).each(function(){ 
     this.checked = event.target.checked; 
     }); 
    }); 
}); 

一個工作小提琴:

http://jsfiddle.net/PmuLz/2/

+0

現在我測試我的代碼與jquery 1.5.2,它工作正常! –