内部验证中的jquery提交会产生过多的递归

时间:2010-10-10 21:54:39

标签: jquery forms form-submit

因为jquery对话框的方式,当使用“确认”对话框时,你必须立即返回false,如果用户选择“Ok”,则触发表单提交。

所以,我正在使用这段代码:

     function validoForm()
    {
//some code here...
        if (datosTdcIncompletos==true)
        {
            var $dialogTDC= $('<div></div>')
            .html("TDC information incomplete\n\rDo you want to continue?")
            .dialog({
                autoOpen: false,
                modal:true,
                title: 'Confirm',
                buttons: {
                    Ok: function() {$( this ).dialog( "close" ); $('#bookForm').submit();},
                    Cancel: function() {$( this ).dialog( "close"); return false;}
                }

            });
            $dialogTDC.dialog('open');
            return false;


        }
        $('#bookForm').submit();
    }

<script type="text/javascript">
    $(document).ready(function() {

        $('#submitBtn').click(function (){ $('#bookForm').submit();});

        var options1 = {
                  target: '#bookForm', 
                  url: 'http://localhost/include/processForm.php',
                  type:'post', 
                  beforeSubmit:validoForm, 
                  success: showResponse
                  };
        $('#bookForm').ajaxForm(options1); 

    });
</script>

问题出现是因为Ok按钮功能(Ok: function() {$( this ).dialog( "close" ); $('#bookForm').submit();},),因为这是再次提交表单而且我收到“太多递归”错误。

应该怎么做?

2 个答案:

答案 0 :(得分:1)

您需要将整个验证和对话作为单个实体工作。因此,当单击提交按钮时,javascript验证将启动,对话将一次性显示。然后对话作为验证过程的最后一步。

因此,在验证方法结束时,您应该返回从对话框返回的值或返回true(假设对话框显示表单不完整时)。

这也意味着删除提交按钮上的点击事件,否则你只会在循环中四处走动。

答案 1 :(得分:1)

您的submitBtn点击处理程序应该只运行验证方法(并返回false以防止默认机制)。

然后你的验证方法只应在用户确认OK时调用submit。

您还需要删除最后一个$('#bookForm')。submit();在你的验证方法中,它会一直被调用。