2013-08-23 102 views
1

我看着其他線程,但沒有發現任何解決方案,爲我工作。jQuery的所有複選框選擇只能使用一次

我想在這裏選擇所有的複選框HTML:

<input type="checkbox" id="selectall" onchange="toggleAllWorkers(this.checked);" />ALL<br> 
<input type="checkbox" class="emp" name="w0" value="1" onchange="buildPage();" />Andrey <br> 
<input type="checkbox" class="emp" name="w1" value="4" onchange="buildPage();" />Brian <br> 
<input type="checkbox" class="emp" name="w2" value="5" onchange="buildPage();" />Eric <br> 
<input type="checkbox" class="emp" name="w3" value="3" onchange="buildPage();" />Ken <br> 
<input type="checkbox" class="emp" name="w4" value="2" onchange="buildPage();" />Kerry <br> 

JAVASCRIPT

function toggleAllWorkers(status) { 
    $("#clickmenu .emp").each(function(index) { 
     console.log(index + ": "+$(this).attr("checked")+' status:'+status+' Value:'+$(this).val()); 
     $(this).attr("checked",status); 
     console.log(index + ": "+$(this).attr("checked")); 
    }); 
} 

但它只是重新加載頁面後工作兩次。

回答

2

您應該使用prop功能。 http://api.jquery.com/prop/

function toggleAllWorkers(status) { 
    $('.emp').prop('checked',status); 
} 

同樣,也沒有必要使用each,這可以用一個簡單的選擇來完成。

+0

當我試圖讓他們都happend是「上」所有的時間值。 var values = {}; \t $ inputs.each(函數(){ \t \t值[this.name] = $(本).VAL(); \t}); – AnKing

+0

它既不工作也不工作。如果我把console.log(值);它返回所有複選框「上」 – AnKing

+0

http://jsfiddle.net/nvqBA/ - 我不知道爲什麼你看到的是,看看這個 –

3

替換所有實例的attr()

$(this).attr("checked",status); 

prop()

$(this).prop("checked",status); 

當你更改屬性像checked
你可以刪除內聯JS,縮短了事件處理程序到:

$('#selectall').on('change', function() { 
    $("#clickmenu .emp").prop('checked', this.checked); 
}); 
+0

這是爲什麼?321 –

+1

I'ts因爲ATTR()僅僅只改變了屬性和功能下一次運行時,它會檢查屬性設置,它並不像它沒有改變,屬性是。 – adeneo

+0

也只是'this.checked =狀態;' –