2013-07-05 141 views
3

我有一個包含16個複選框的表單。我試圖跟蹤檢查框的數量並在表單下方提供即時反饋,但我無法獲取numSelected變量以更新變化。Jquery .change not updating field

這裏是我的腳本:

$(document).ready(function() { 
// the jQuery.iCheck library wraps the input in a div for styling 
$('input').iCheck({ 
    checkboxClass: 'icheckbox_square-red' 
}); 

// count the checkboxes 
var cb = $(":checkbox"), 
    numSelected = 0, 
    numLeft = 2 - parseInt(numSelected, 10); 
$(cb).change(function() { 
    //alert("a checkbox was checked!"); 
    var $this = $(this);   
    var numSelected = $this(':checked').length; 
    $('#status-box').html("Out of "+$this.length+" images you have selected "+numSelected+" for processing, you have "+numLeft+" remaining"); 
}); 
}); 

這裏是一個jsfiddle我放在一起,任何幫助表示讚賞!

+1

你爲什麼不使用I確認的事件 - 如果你已經包含了嗎? 'ifChecked'或'ifUnchecked'可以幫助你。 –

回答

4

檢查插件提供的callbacks API。所以基本上使用ifToggled回調:

var $cb = $('input:checkbox'); 
$cb.iCheck({ 
    checkboxClass: 'icheckbox_square-red' 
}).on('ifToggled', function() { 
    var numSelected = $cb.filter(':checked').length, 
     numLeft = 2 - numSelected; 
    $('#status-box').html("Out of "+$cb.length+" images you have selected "+numSelected+" for processing, you have "+numLeft+" remaining"); 
}); 

Fiddle

不知道負剩餘數量是否意,但似乎題外話,我會離開這個業務邏輯位給你。 =]

+0

那麼,重新讀取它看起來像'numLeft'的原始代碼應該是靜態的。不過,邏輯取決於OP。 –

+1

很好地完成Fabricio!我從來沒有想過要看看iCheck插件的答案。僅供參考,我有更多的邏輯補充,但我不想混淆這個問題。謝謝! –

+0

感謝Fabricio。 「On ifToggled」對我來說非常合適。 – Cheeky

0

試試這個:

$('.image-checkbox').change(function() { 
    var numSelected = $("input:checkbox:checked").length; 
    alert(numSelected); 
}); 
+0

這對iCheck插件不起作用,Fabricio的答案是正確的。 –