2013-08-23 96 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 =状态;' –