2

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

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

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

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

任何建议都会非常受欢迎,比你!

4

4 回答 4

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;
}
于 2012-05-02T09:30:10.370 回答
2

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

在这个紧凑的情况下,您只需过滤可见的,然后过滤未检查的,如果有,则返回 false(最终返回的是==运算符的结果)。

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

jsFiddle 演示

注意:与@zerkms 的解决方案相比,我基本上将选择器分解了。:visible不是可以使用本机浏览器选择器引擎(如果可用)的选择器(请参阅手册中的附加说明)。

于 2012-05-02T09:30:31.713 回答
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;

这是给你的工作演示

于 2012-05-02T09:25:06.430 回答
-2

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

于 2012-05-02T09:24:56.583 回答