我刚刚用jQuery遇到过这个问题。我有一个输入无线电/复选框池,当状态改变时,应该添加或删除一个类。由于复选框是一个或多个,我需要在删除类之前检查是否所有复选框都未选中。这就是我遇到的问题,我解决了这个问题,但不知道为什么它在第一次尝试时无效。
这不起作用 - 它总是向我返回length = 0:
if ($(this).filter(':checked').length <= 0)
这有效:
if ($('input[name="'+$(this).attr('name')+'"]').filter(':checked').length <= 0)
我附上了一个小提琴,所以你可以理解我来自哪里。我的问题是,为什么我不能只在我得到其他东西(类型,名称等)时将长度引用到$(this)?
PS:如果这是一个愚蠢/重复的问题,我会将其删除。
答案 0 :(得分:2)
<强> JSFIDDLE DEMO 强>
使用此
if ($(this).siblings(':checked').length <= 0)
而不是
if ($(this).filter(':checked').length <= 0)
原因:
.siblings()查找所有已更改复选框的兄弟姐妹复选框,其中.filter将匹配元素集合减少为与选择器匹配的元素。