2013-01-16 521 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'); 

,如果你有说类的一个元素。