2013-01-16 149 views
0
$('input.plan-select').change(function() { 
    // alert('Handler for .change() called.'); 
    $(".subscription", this).toggleClass('selected'); 
}); 

小提琴:http://jsfiddle.net/XPVVp/更改回調函數

它不切換類由於某種原因,我不知道爲什麼它不工作。

+0

'input'是一個void元素:它*不能*包含任何其他元素。因此,使用它作爲選擇器的上下文將會和* can *找不到元素。你究竟在做什麼? –

回答

1

這是因爲.subscription select不是input元素的孩子,這就是您的代碼寫入方式。相反,.subscription元素的母,所以你需要使用正確的jQuery的操作來找到這樣合適的父:

$('input.plan-select').change(function() { 
    // alert('Handler for .change() called.'); 
    $(this).closest(".subscription").toggleClass('selected'); 
}); 

.closest()將查找父鏈,直到發現該選擇相匹配的第一個父。這裏

工作演示:http://jsfiddle.net/jfriend00/krTER/

+0

+1 .'closest'解釋 – 3zzy

0

因爲input位於.subscription div元素內,反之亦然。因此,this以下沒有.subscription元素...無法將toggleClass()應用於。你想要達到什麼目的?

0
$('input.plan-select').change(function() { 
    // alert('Handler for .change() called.'); 
    $([".subscription", this]).toggleClass('selected'); 
}); 

似乎是工作

+0

啊是的,但我想知道爲什麼我的doens't工作?我很確定我在 – 3zzy

+0

之前使用過這個語法,所以我想知道同樣的內容,因此我的疑問 - 「似乎正在工作」 – Adrian

+1

自從我使用jquery以來,其實已經有一段時間了。看看它的文檔,jQuery(選擇器,[上下文]);因此jQuery(selector,...)將不起作用。你可以提供jQuery(selectorArray);這就是爲什麼你的方法不起作用。這被用作上下文。 – Adrian

0

我不知道你想與選擇做真的是...... 您可以使用「這個」選擇獲取單選按鈕,然後使用.parent()指令向上一級。

$('input.plan-select').change(function() { 
    // alert('Handler for .change() called.'); 
    $(this).parent().toggleClass('selected'); 
}); 

您還可以使用

$('.subscription').toggleClass('selected'); 

,如果你有說類的一個元素。