提交由jquery生成的表单

时间:2015-01-24 17:21:16

标签: javascript jquery ajax forms

我的网站上的登录表单使用覆盖/模态与jquery-modal(http://kylefox.ca/jquery-modal/examples/

显示

我正在使用ajax + php来验证表单。如果验证通过,则应提交表格。

我可以暂停提交以进行验证(使用return false),并且验证本身工作正常。但我不知道如何提交表格

我尝试了很多天真的变化:return true,$ theform.submit(),$(“body”)。unbind(“#myloginform”)等等..但到目前为止没有运气

$("body").on("submit", "#myloginform", function() {

    $theform = $(this);

    $.ajax({
        url: "login_check.php",
        type: "POST",
        cache: false,
        timeout: 9000,
        data: $theform.serialize(),
        dataType: "json",
        success: function(data) {
            if (data) {
                if (data.status == "ok") {
                    alert("success! now the form can be submitted");
                    // SUBMIT THE FORM (instead of the alert)
                } else {
                    $("body #loginstatus").html(data.status);
                }
            } else {
                alert("Error bla bla.");
            }
        },
        error: function(e) {
            alert("Error (ajax) bla bla.");
        }
    });

    return false;

});

3 个答案:

答案 0 :(得分:3)

要提交FORM,您可以调用js native submit方法:

document.getElementById('myloginform').submit();

参见变体:

$('#myloginform')[0].submit();
$('#myloginform').get(0).submit();

另一种方法是将ajax的context选项设置为this

$.ajax({
     context: this,
     ...,
});

然后在成功回调中,使用以下方式提交FORM:

this.submit();

编辑:我发现你已经在使用变量引用,所以在你的情况下,你也可以使用:

$theform[0].submit();

所有这些片段都不会触发jQuery提交处理程序,避免了循环引用错误。

答案 1 :(得分:0)

另一种方法:

var checkValid = false;
$("body").on("submit", "#myloginform", function () {
    $theform = $(this);

    if (!checkValid) {
        $.ajax({
            url: "login_check.php",
            type: "POST",
            cache: false,
            timeout: 9000,
            data: $theform.serialize(),
            dataType: "json",
            success: function (data) {
                if (data) {
                    if (data.status == "ok") {
                        alert("success! now the form can be submitted");
                        // Everything is OK
                        checkValid = true;
                        $theform.submit();// Next time, no validation process, just natural send of the form.
                    } else {
                        $("body #loginstatus").html(data.status);
                    }
                } else {
                    alert("Error bla bla.");
                }
            },
            error: function (e) {
                alert("Error (ajax) bla bla.");
            }
        });

        return false;
    }

});

答案 2 :(得分:-1)

由于您正在使用jQuery,我建议您查看jQuery提交功能

http://api.jquery.com/submit/