我有一些代码使用visibility属性显示/隐藏复选框。如果按钮是可见的,那么在提交表单时,我需要以某种方式确保确实检查了所有可见复选框。
到目前为止,这是我的尝试:
$("form").submit(function() {
if ($(':checkbox:visible:not(:checked)').filter(function() {
return $(this).css('visibility') != 'hidden';
}).length) {
alert('return false');
}
});
问题似乎是过滤器之后的$(this)是表单而不是复选框。
任何建议都会比你更受欢迎!
答案 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;
});
注意:与@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;
答案 3 :(得分:-2)
据我所知,$(this)指的是表单,而不是复选框。