jQuery - 按可见性过滤,如果选中

时间:2012-05-02 09:22:50

标签: jquery forms jquery-selectors checkbox

我有一些代码使用visibility属性显示/隐藏复选框。如果按钮是可见的,那么在提交表单时,我需要以某种方式确保确实检查了所有可见复选框。

到目前为止,这是我的尝试:

$("form").submit(function() {
    if ($(':checkbox:visible:not(:checked)').filter(function() {
    return $(this).css('visibility') != 'hidden';
    }).length) {
        alert('return false');
    }
});

问题似乎是过滤器之后的$(this)是表单而不是复选框。

任何建议都会比你更受欢迎!

4 个答案:

答案 0 :(得分:3)

这个怎么样:http://jsfiddle.net/zerkms/WUGh3/1/

if ($('.checkbox:visible:not(:checked)').length) {
    alert('not all visible checkboxes are checked');
    return false;
}

因此,您只需检查是否有任何未检查的可见复选框。如果是这样 - 返回false

PS:正如@bažmegakapa所建议的那样,更有效的写作方式是:

if ($('.checkbox:not(:checked)').filter(':visible').length) {
    alert('not all visible checkboxes are checked');
    return false;
}

答案 1 :(得分:2)

在您的解决方案中,this引用表单本身,is()仅在一个元素上运行,第一个元素在jQuery集合中,因此您应该采用不同的方法。

在这个紧凑的版本中,您只需过滤掉可见的那些,然后过滤未检查过的那些,如果有,则返回false(最后返回的是==的结果操作者)。

$("form").submit(function() {
    return $('.checkbox').filter(':visible').not(':checked').length == 0;
});

jsFiddle Demo

注意:与@zerkms的解决方案相比,我基本上打破了选择器。 :visible不是可以使用本机浏览器选择器引擎的选择器(请参阅Additional Notes in the manual)。

答案 2 :(得分:1)

这一行:

$('.checkbox').filter(':visible')

检查是否有类checkbox的可见复选框。

然后检查表单对象以查看它是否已被选中,这是因为无法检查表单。

你可能想做类似的事情:

var checkBoxes = $('.checkbox').filter(':visible');
var returnValue = true;

// Check if each visible checkbox is checked
checkBoxes.each(function(){
    if(! $(this).is(':checked'))
    {
      returnValue = false;
    }
});

return returnValue;

Here's a working demo for you

答案 3 :(得分:-2)

据我所知,$(this)指的是表单,而不是复选框。