在preventDefault和unbind之后提交表单

时间:2014-11-12 14:33:05

标签: javascript jquery

我在表单上使用了preventDefault,我试图在语句为真时自动提交。

function codeCheck(){
        $("#code-form").submit(function(e){
            e.preventDefault();
        });
        var code = $("#code").val();
        $.ajax({
            url: "index.php",
            type: "POST",
            data: { codeCheck: 1, ajaxCode: code }
        }).done(function(check) {
            if(check == 2){
                $("#used").css("display", "block");
            }
            else if(check == 1){
                $("#code").css('background', "url('../img/check.png') no-repeat scroll 170px 2px");
                $("#submit").css('display', 'block');
                $("#submit").on("click", function(){
                    $( "#container" ).fadeOut( "slow", function() {
                        $("#code-form")[0].submit();
                    });
                });

                $("#used").css("display", "none");
            }
            else{
                $("#code").css('background', "none");
                $("#used").css("display", "none");
                //$("#code-form").unbind('submit');
            }
        }); 
}

unbind确实有效我解除绑定时可以使用提交按钮。但是$("#form").submit()部分不起作用,它在淡出后不会自动提交表单。

这是一个小提琴:http://jsfiddle.net/90wmpw7x/1/

我想要的只是它在淡出后继续形式。

编辑:为了更加清晰,我刚刚添加了完整的功能。

2 个答案:

答案 0 :(得分:3)

您想要使用以下内容,因为您说已经阻止了提交事件。这将以默认方式提交表单:

$("#form")[0].submit();

而不是:

$("#form").unbind('submit', function(){
    $("#form").submit();    
});

特别提示:

为此,请确保您没有name="submit"的任何表单字段。

<强>更新

鉴于更新的代码,这是我的建议:

$("#form").submit(function(e){
    e.preventDefault();

    $( "#container" ).fadeOut( "slow", function() {
        $("#form")[0].submit();    
    });
});

fadeOut代码应移至提交处理程序

DEMO

答案 1 :(得分:1)

您不需要unbind(),因为页面会刷新,所有事件处理程序都将被销毁。

$("#container").fadeOut("slow", function() {
    $("#form").submit();
});

但是,如果您附加了事件处理程序并且您通过ajax发布并想要取消绑定该事件,那么您可以使用链接

$('#form').unbind('submit').submit();