2010-11-10 67 views
0

我有一个依赖电台组,通过点击input#radio10,输入#radio16 .form-b​​lock-cms应该滑落。并没有问题。jQuery not()选择器问题

问题是当我选择输入#radio16。 form-b​​lock-cms向下滑动并立即退回。如果input#radio16没有被选中,我试图使用cond语句,但是它仍然在执行这个操作。

我该如何绕过它?

if ($('input#radio10, input#radio16').is(':checked')) { 
    $('.rsform-block-cms').slideDown().addClass('additionalField') 
} 
else if ($('input#radio16').not(':checked')) { 
    $('.rsform-block-cms').slideUp(); 
}; 

回答

5

.not()过滤器单元(但仍然返回jQuery对象,因此这将是〜= TRUE),你需要什么,而不是为!.is(),像这样:

!$('input#radio16').is(':checked') 

还是有点简单:

if ($('#radio10, #radio16').is(':checked')) { 
    $('.rsform-block-cms').slideDown().addClass('additionalField') 
} else if (!$('#radio16')[0].checked) { 
    $('.rsform-block-cms').slideUp(); 
} 
+0

如果没有与页面上的ID“radio16”,然后'$(“#radio16”)[0没有元素] .checked'会抛出一个错误,ergo,破坏程序。防范这一点可能是个好主意。我用'$(“#foo”)[0] || {}'在我的答案中。你怎么看? – 2010-11-10 13:39:16

+0

@ime - 这是另一个问题的后续...它会在那里:) – 2010-11-10 13:43:49

+0

我想我只是偏执狂:) – 2010-11-10 13:52:51

1

您可能还需要使用变量,这样你就不会搜索同一个元素两次...

var radio10 = $("#radio10")[0] || {}; 
var radio16 = $("#radio16")[0] || {}; 
var $rsfrom = $("#.rsform-block-cms"); 

if (radio10.checked && radio16.checked) { 
    $rsform.slideDown().addClass("additionalField"); 
} else if (!radio16.checked) { 
    $rsform.slideUp(); 
} 

这不仅有较好的表现,但它也更容易阅读:)