2012-07-10 183 views
2

我想爲jQuery製作一個基本的驗證碼模塊。我有一個體面的開始,但由於某種原因.children()似乎沒有工作。見這裏:http://jsfiddle.net/pTbeW/ 我現在有這樣的:Jquery .children()不按預期方式工作

$(this).children('.captchain-start').hide(); 
$(this).children('.captchain-show').show(); 

如果我將其更改爲

$('.captchain-start').hide(); 
$('.captchain-show').show(); 

它完美的作品。但是這個解決方案並不理想,因爲它不允許這個驗證碼的兩個實例在同一個頁面上。我懷疑它與查詢設置的html有關,但我不知道如何。我遠離javascript和jQuery專家,但這似乎是一件相對容易的事情。我錯過了什麼?我長時間看着它有疲倦的眼睛嗎?任何幫助,將不勝感激。

回答

0

您應該使用$(this).nextAll()而不是$(this).children(),因爲您要隱藏和顯示的元素不是a元素的子元素,而是兄弟元素。

http://api.jquery.com/nextAll/

+0

我無法對其他答案發表評論,但@ rich.okelly解決方案無法正常工作,因爲children()和find()都是遍歷到後代元素中的,即.captchain -start'和'.captchain-show'不是。 – 2012-07-10 13:54:57

+0

謝謝,這工作完美! – 12345j 2012-07-11 02:36:27

4

因爲'.captchain-*'元素不是孩子,而是兄弟姐妹。請嘗試以下操作:

$(this).nextAll('.captchain-start').hide(); 
$(this).nextAll('.captchain-show').show(); 
+0

澄清,'.find'通過後代各級搜索,而'.children'只搜索直接後裔(一級)。 – jbabey 2012-07-10 14:06:20

+0

感謝您的建議,但似乎並不奏效。請參閱http://jsfiddle.net/pTbeW/3/ – 12345j 2012-07-11 02:34:29

0
this 

在點擊事件引用點擊的元素,這與類的captchain啓動'的元素。所以,你不必掃描的孩子,你可以使用:

$(this) 

的實際點擊的元素或元素選擇,而不是

代替。