2012-09-20 80 views
1

,而我試圖找出一個數組的長度:數組的長度不返回到0

$('input:checkbox[name="promoOn[]"]').click(function(){ 
    var attributes = []; 
    $('input:checkbox[name="promoOn[]"]:checked').each(function(index) { 
    attributes.push($(this).val()); 
    $('#promo-on-total').html(attributes.length); 
    });  
}); 

出於某種原因,array.length不返回到0? 下面是結果:

Checkbox 1, checked = array.length = 1 
Checkbox 2, checked = array.length = 2 
Checkbox 2, unchecked = array.length = 2 
Checkbox 1, unchecked = array.length = 1 (not 0???) 

任何想法可能是錯誤的?

+5

發佈代碼,您在哪裏彈出數組中的項目 –

+1

是我還是當您未選中複選框2 array.length不減少? –

+0

'var attributes = [];'會重新初始化數組?不是?意味着每次點擊都會有'0'長度。所以減少是不需要的。 – Dev

回答

1

問題是,您正在運行所有選中的複選框並更新promo-on-total div中的長度值,但是一旦取消選中所有複選框,循環不再執行(所以值不會更新)。

這會給你你所期望的,我認爲:

$('input:checkbox[name="promoOn[]"]').click(function(){ 
    var checkedValues = []; 
    $('input:checkbox[name="promoOn[]"]:checked').each(function(index) { 
    checkedValues.push($(this).val()); 
    }); 

    $('#promo-on-total').html(checkedValues.length);   
}); 

DEMO

+0

完美,謝謝。 – squeaker

+0

不客氣! – Asciiom

0

我認爲這個代碼會更好。

$('input:checkbox[name="promoOn[]"]').click(function(){ 
    $('#promo-on-total').html($('input:checkbox[name="promoOn[]"]:checked').size()); 
}); 

問題是當你取消選中複選框,$( '輸入:複選框[NAME = 「promoOn []」]:選中')是空的,所以HTML內容$('#促銷上計')不更新。

我做了一個jsfiddle here