Проверка всех флажков сразу с помощью Javascript

Эта функция предупреждает прямо totalqt только тогда, когда я устанавливаю флажки по одному. Но не работает должным образом для #check_all: alert totalqt = 0.

Что я сделал не так, может кто-нибудь объяснить?

var totalqt=0;
 $('#check_all').click( function() {
 $('.checkbox').click(); 
 alert(totalqt);
 } ); 


 $('.checkbox').click(function(e) {
 e.stopPropagation();
 if($(this).closest("tr").not('#hdr').hasClass("row_selected")){
 $(this).closest("tr").not('#hdr').removeClass("row_selected");
 totalqt=totalqt - parseInt($(this).closest("tr").find("#qt").text(), 10);
 }
 else {
 $(this).closest("tr").not('#hdr').addClass("row_selected");
 totalqt=totalqt + parseInt($(this).closest("tr").find("#qt").text());
 }

HTML выглядит так:

...

...
2 ответа

Фактически, когда флажок изменяется вручную, он не запускает обработчик. попробуйте что-то вроде этого.

function doIt(obj){
 if($(obj).closest("tr").not('#hdr').hasClass("row_selected")){
 $(obj).closest("tr").not('#hdr').removeClass("row_selected");
 totalqt=totalqt - parseInt($(obj).closest("tr").find("#qt").text(), 10);
 }
 else {
 $(obj).closest("tr").not('#hdr').addClass("row_selected");
 totalqt=totalqt + parseInt($(obj).closest("tr").find("#qt").text());
 }
}

тогда

$('.checkbox').click(function(e) {
 e.stopPropagation();
 doIt(this);
});

а также

$('#check_all').click( function() {
 if($(this).prop('checked')){
 $('.checkbox').each(function(){
 $(this).prop('checked', true); 
 doIt(this);
 alert(totalqt);
 });
 }else{

 $('.checkbox').each(function(){
 $(this).prop('checked', false); 
 doIt(this);
 alert(totalqt);
 });
 }

} );


Я изменил свой ответ на следующее, попробуйте следующее:

<div>
 
</div>
<div id="list">
 
 
 
 
 
</div>

и jquery:

var checkboxes = $(":checkbox", "#list").change(function() {
 var allIsChecked = checkboxes.length === checkboxes.filter(":checked").length;

 checkAll[0].checked = allIsChecked;

});

var checkAll = $("#checkall").change(function() {
 checkboxes.prop("checked",this.checked);
});

licensed under cc by-sa 3.0 with attribution.