jQuery submit()和AJAX事件;如何触发常规表单提交?

时间:2012-02-24 19:56:45

标签: jquery forms form-submit

我正在开发一个项目,当点击提交按钮时,我抓住事件并通过外部服务运行表单以检查某些内容是否有效。

如果出现问题,我会弹出一个对话框,告诉用户存在问题,并为他们提供覆盖选项以继续。

问题是如何触发表单提交。如果我只使用.submit(),它会将表单再次发送到对话框中。

$('#editAddr').submit(function(){
    var checkString = addrString();
    $.getJSON('/validate.php' + checkString, function(data){
        if(data == 0){
            var confw = '';
            confw += '<div><p><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span>';
            confw += 'Failed validation.</p></div>';

            var $dialog = $(confw).dialog({
                title: "Validation Problem",
                modal: true, resizable: false, width: 500,
                buttons: {
                    "Edit": function(){
                        $(this).dialog('close');
                    },
                    "Override": function(){
                        $(this).dialog('close');
                        $('#editAddr').submit();
                    }
                }
            });
        }else{
            $('#editAddr').submit();            
        }
    });

    return false;
});

如何通过单击对话框按钮正确提交此表单?

编辑:确保您的表单不包含id =“submit”的按钮,否则您将破坏jQuery .submit()

5 个答案:

答案 0 :(得分:4)

而不是绑定到表单的提交事件,而是绑定到提交按钮的click事件。这样,您可以捕获submit事件的click事件,并在需要时返回false,或者继续执行表单上的submit()事件。

​$('input[type="submit"]').click(function(e){
    e.preventDefault();
    if() // invalid data
    {

    }
    else // good to go
    {
        $('form').submit();
    }
})​

如果有人禁用JavaScript,此解决方案也会很好地降级。我读过的其他一些解决方案都不允许这样做。

答案 1 :(得分:1)

问题来自你连接逻辑的方式。

表单中的按钮应该是常规按钮,而不是提交按钮
   那么,它的onaction属性应该指向上面的方法。

之后,form.submit()应按预期工作。

另一种选择是在方法上添加一个标志。

答案 2 :(得分:1)

只需在表单的dom元素上调用.submit()

我认为你可以从jQuery中得到它:

$('#editAddr')[0].submit();  // goes in your Override button logic

答案 3 :(得分:1)

您的问题是在Jquery对象上调用submit会再次通过jquery onsubmit运行它。一旦你完成了验证器,你只需要在DOM对象上调用它 - 你可以用

来实现它
document.GetElementById(editAddr).submit();

$("#editAddr").get(0).submit();

至少,这是它与验证提交处理程序一起使用的方式。我认为它与标准提交处理程序的工作方式相同。

答案 4 :(得分:0)

添加类似于isOverride或isValid布尔值的内容,您可以在提交函数的开头检查以绕过进一步处理。