2013-12-16 46 views
0

我剛剛遇到了這個問題與jQuery。我有一個輸入收音機/複選框池,當他們的狀態改變時,應該添加或刪除一個類。由於複選框是一個或多個,我需要檢查是否所有複選框在刪除類之前都未選中。這就是我遇到的問題,我解決了,但不知道爲什麼它不起作用,我的第一次嘗試。

這不工作 - 它總是返回長度爲0對我說:

if ($(this).filter(':checked').length <= 0) 

這工作:

if ($('input[name="'+$(this).attr('name')+'"]').filter(':checked').length <= 0) 

我附上一個小提琴,這樣你就可以明白的地方我來了從。我的問題是,爲什麼當我可以得到其他任何東西(類型,名稱等)時,我只能將長度引用$(this)?

http://jsfiddle.net/9XH37/2/

PS:如果這是一個愚蠢的/重複的問題,我會刪除它。

+1

請不要刪除問題,特別是如果有人花時間回答它。你永遠不知道還有誰可能想知道同樣的事情。 –

+0

有些人對某些問題以及他們可能有重複時有敵意。我只是想確保他們知道我不懶惰... :) – Fabi

回答

2

JSFIDDLE DEMO

使用此

if ($(this).siblings(':checked').length <= 0) 

,而不是

if ($(this).filter(':checked').length <= 0) 

原因:

.siblings()查找所有與更改後的複選框相同的複選框,其中.filter將匹配元素的集合減少爲匹配選擇器的那些元素。

+0

感謝您的意見,我沒有意識到兄弟姐妹()...我的解決方案的作品,我只需要了解爲什麼$ (this)不會捕獲被選中的過濾器。 – Fabi

+0

.filter()匹配確切的選擇器,所以'$(this).filter()'期望所有的輸入是相同的選擇器。 'if($(「。r0 input」).filter(':checked').length <= 0)'這也可以。 – Krishna

+0

「其中.filter將匹配元素的集合減少爲匹配選擇器的元素」 - 所以這隻會得到確切點擊的複選框?即使它與我的代碼具有相同的名稱? – Fabi