4

我正在使用 Yii PHP 框架开发一个应用程序,并且我正在使用 jQuery 进行表单验证。我有一个页面,上面有一个表单,其中包含其输入元素的复选框

但是,这些复选框是根据条目动态创建的。

为了更好地理解它,我正在制作一个交叉矩阵,基本上是一个表格,有女性的和男性的列,并在有交叉点的单元格中定义复选框。从字面上看,男性和女性个体的交叉矩阵。

但是,如果还没有定义为交叉的男性和女性,那么对于验证,它不应该允许用户提交。

我的问题是如何知道表单是否没有元素?

如果有复选框元素,我如何才能知道用户是否至少检查了其中一个?


这是我尝试过的,但它似乎没有抓住它,表单仍然提交数据,我想知道为什么:

$('#crossingMatrixForm').submit(function() {

       $(":input").each(function() {
           if ($(this).val() === empty()) {
               alert("form empty!");
               return false;
           }
       });

});
4

3 回答 3

5

您可以查看表单中是否存在至少一个复选框并选中

$('#crossingMatrixForm').submit(function(){    
    if (!$(this).find("input:checked").length) {
        alert("form empty!");
        return false;
    }
});

如果您想在“不存在复选框”和“至少存在一个,但没有选中”之间消除歧义,您可以$(this).find(":checkbox")将前者用于前者,.filter(":checked")后者用于后者。在这两种情况下,使用.length来查看是否至少存在一个控件:

$('#crossingMatrixForm').submit(function(){    
    var checkboxes = $(this).find(":checkbox");
    if (!checkboxes.length) {
        alert("form empty!");
        return false;
    }
    else if (!checkboxes.filter(":checked").length) {
        alert("none selected!");
        return false;
    }
});
于 2013-09-30T08:24:30.660 回答
2

根据文档empty()是:

Description: Remove all child nodes of the set of matched elements from the DOM.

所以你必须使用" "来比较字符串。

于 2013-09-30T08:31:05.553 回答
1

jQuery 允许您测试:checkbox字段以及是否有:checked。因此,您可以尝试以下方法:

$('#crossingMatrixForm').submit(function(){
    var $this = $(this);
    if (!$this.find('input:checkbox').length || !$this.find('input:checked').length) {
        alert('Form empty!');
        return false;
    }
});
于 2013-09-30T08:31:40.137 回答