在jQuery .each()循环中取消表单提交

时间:2011-02-16 07:00:13

标签: jquery forms loops each

我目前有一个大型民意调查,由一个表格,5个类别,每个类别中的一堆问题和每个问题的少数单选按钮答案组成。每个类别都在不同的字段集中,每个类别都需要不同的最低投票数才能处理表单。

基本上,在表单提交时,我试图让jQuery通过.each()循环遍历每个fieldset并确定是否已满足每个类别的最小投票数,如果没有,则取消表单提交。到目前为止我所处理的类别很好,但不会阻止表格在必要时提交。

$('#pollform').submit(function(event){

    var formsubmit = event;

    $('fieldset').each(function(formsubmit){
        catname     = $(this).children('input[name=catname]').val();    // Category name
        reqvotes    = $(this).children('input[name=catcount]').val();   // Minimum required number of votes for current category in loop
        numvotes    = $(this).children(':checked').size();              // Number of votes for current category in loop 

        // Check minimum number of votes against actual number cast.  Alert user and prevent form from submitting if necessary
        if (reqvotes > numvotes)
        {
            alert('You need to fill out at least '  + reqvotes + ' items for ' + catname  + '.');

            formsubmit.preventDefault();
        }
    });

});

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您是否尝试过返回false?当然,你必须在每个循环之外这样做。

$('#pollform').submit(function(event){

    var stopsubmit = false;

    $('fieldset').each(function(formsubmit){
        if(stopsubmit) return;
        catname     = $(this).children('input[name=catname]').val();    // Category name
        reqvotes    = $(this).children('input[name=catcount]').val();   // Minimum required number of votes for current category in loop
        numvotes    = $(this).children(':checked').size();              // Number of votes for current category in loop 

        // Check minimum number of votes against actual number cast.  Alert user and prevent form from submitting if necessary
        if (reqvotes > numvotes)
        {
            alert('You need to fill out at least '  + reqvotes + ' items for ' + catname  + '.');

            stopsubmit=true;
        }
    });
    if(stopsubmit) return false;
});

我没有测试此代码。

答案 1 :(得分:0)

在第二个return false;之后添加});,您只需返回false一次,而不是每次循环each()函数。