2012-01-24 77 views
0

我想檢查一組單選按鈕是否已被選中。但是,如果事後選擇收音機,它似乎不會更新。jQuery .each()不更新

代碼:

$('button#submit').click(function() { 
    var addr_chkd = 0; 
    $('input:radio[name="address"]').each(function() { 
     if (!$(this).attr('checked')) 
      addr_chkd++ 
    }); 
}); 

if (addr_chkd) 
    // do something 

當點擊該按鈕並沒有被選中,代碼的偉大工程。但是,當選擇單選按鈕並單擊按鈕時,addr_chkd仍會返回大於零的值。

[更新]

的問題是,我檢查addr_chkd大於零。我應該檢查addr_chkd是否等於單選按鈕的長度。我對@PPvG的答案做了一個小小的修改,它的確有竅門。

$('button#submit').click(function() { 
    var radios = $('input:radio[name="address"]'); 
    var num_unchecked = radios.filter(':not(:checked)').length; 
    if (num_unchecked === radios.length) { 
     alert('please select a button'); 
    } 
}); 
+2

爲什麼它不會大於0?只有一個單選按鈕將被檢查正確?這意味着計數器將增加每個未選中的單選按鈕。你想要代碼做什麼? –

+0

我想確保至少有一個單選按鈕被選中。我的邏輯可能是錯誤的(以及這不起作用的原因),但是如果addr_chkd> 0,那麼沒有檢查到任何按鈕。 – RHPT

回答

0

使用$(this).attr()而不是這個。

+0

糟糕。在我的部分錯別字。 – RHPT

2

試試這個

$('button#submit').click(function() { 
    var addr_chkd = 0; 
    $('input:radio:[name="address"]').each(function() { 
     if (!$(this).is(':checked')) 
      addr_chkd++ 
    }); 
}); 

,或者你可以簡單地做它作爲

$('button#submit').click(function() {  
    var addr_chkd = $('input:radio[name="address"]:not(:checked)').length 
} 

,因爲在同一時間只有一個單選按鈕可以進行檢查,所以你也可以做

$('button#submit').click(function() {  
     var addr_chkd = $('input:radio[name="address"]').length - 1; 
} 

以上所有的小提琴示例:http://jsfiddle.net/pdm2F/

1

您可以使用一個更簡單的方法:

var addr_chkd = $('input:radio[name="address"]:checked').length; 

或者,如果你的意思是不是檢查:

var addr_chkd = $('input:radio[name="address"]').not(':checked').length; 

但對於無線輸入,你可能會做錯事。

+1

OP希望哪些未被檢查。 –

2

我不完全清楚你想要做什麼,但我可以用兩種方式解釋addr_chkd

如果「地址」的意思是「加法」,並且要計數的選中單選按鈕的數量,使用此:

$('button#submit').click(function() { 
    var radios = $('input:radio[name="address"]'); 
    var num_unchecked = radios.filter(':not(:checked)').length; 
    if (num_unchecked) { 
     // do something 
    } 
}); 

如果,另一方面,「地址」的意思「地址」,並且要選擇的單選按鈕的指數,使用此:

$('button#submit').click(function() { 
    var radios = $('input:radio[name="address"]'); 
    var checked = radios.filter(':not(:checked)').get(0); 
    if (checked.length > 0) { 
     var index_checked = radios.index(checked); 
     // do something 
    } 
}); 

注意,在這兩種情況下,我感動click處理器內部的if條款。在你的例子中,它在click處理程序之外,這意味着它只會被執行一次,甚至在按鈕被點擊之前。

+0

我想計算未經檢查的單選按鈕的數量。感謝您指出if是在點擊之外。 – RHPT