使用 $(":checkbox").attr("checked", true) 實現全選,點擊「全不選」後再點「全選」失效。原因在於 jQuery 1.6+ 版本 attr 操作 HTML 屬性,prop 操作 DOM 屬性,checked 屬於 DOM 屬性 (property),必須用 prop。
$("#allcheck").click(function(){
$("div :checkbox").attr("checked", true); // ❌ attr 只設定 initial 屬性
});
$("#nocheck").click(function(){
$("div :checkbox").attr("checked", false);
});
$("#allcheck").click(function(){
$("div :checkbox").prop("checked", true); // ✅ 設定 DOM property
});
$("#nocheck").click(function(){
$("div :checkbox").prop("checked", false);
});
| 屬性類型 | 範例 | 正確方法 | 說明 |
|---|---|---|---|
| HTML Attribute (初始值) | id, class, value, href, src | .attr() | 對應 HTML 標籤屬性 |
| DOM Property (即時狀態) | checked, selected, disabled, value (輸入框即時值) | .prop() | 對應 DOM 物件屬性,即時生效 |
var checkboxes = $("div :checkbox");
$("#allcheck").click(function(){
checkboxes.each(function(){ this.checked = true; });
});
$("#nocheck").click(function(){
checkboxes.each(function(){ this.checked = false; });
});
直接操作 this.checked (原生 DOM property) 最穩健,無版本相容疑慮。
var selected = $("div :checkbox:checked").map(function(){ return this.value; }).get();
// ["a", "c"] 等
attr 同時處理 attribute/property,有時能碰巧生效。prop 處理 checked/selected/disabled。attr("checked") 返回 "checked" 字串或 undefined,不再返回布林值。改用 .prop("checked", true/false) 或原生 this.checked,即可徹底解決全選/全不選失效問題。