首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery表单提交,防止默认操作,然后提交

jQuery表单提交,防止默认操作,然后提交
EN

Stack Overflow用户
提问于 2017-03-12 21:35:58
回答 2查看 1.1K关注 0票数 1

我正在使用jQuery重写html表单的提交事件:

代码语言:javascript
复制
$('#contact-form').submit(function(event) {
    event.preventDefault();
});

event.preventDefault()暂时阻止实际表单的发布。然而,在我做了一些异步验证之后,我希望迫使post再次提交表单:

代码语言:javascript
复制
$('#contact-form').submit(function(event) {
    event.preventDefault();

    asyncValidationHere(function(valid) {
        if(!valid) { return; }

        // Turn off the custom form submit event handler now since valid
        $('#contact-form').off('submit');

        // Submit (do the actual form post)
        $('#contact-form').submit();
    });
});

然而,我从来没有看到这份表格张贴。调用$('#contact-form').off('submit'),然后尝试提交$('#contact-form').submit()似乎不起作用。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-12 21:40:34

代码语言:javascript
复制
$('#contact-form').on("submit", function(event) {
    event.preventDefault();

    var that = this; // that is the form

    asyncValidationHere(function(valid) {
        if(!valid) { return; }

        $(that).off("submit"); // to guarante the function won't be invoked

        that.submit(); // submit the form
    });
});

注意:在节点(表单)上调用 that.submit(); (不要与jQuery.submit混淆),它提交表单(这里是MDN上的文档)。

票数 1
EN

Stack Overflow用户

发布于 2017-03-12 21:56:28

您可以从异步函数内部触发submit事件,并传递一些成功标志。然后,在提交事件的处理程序中,可以根据是否存在该标志来调用preventDefault。类似于:

代码语言:javascript
复制
$('#contact-form').submit(function(event) {

    if (!event.data.valid) {

        event.preventDefault();

        asyncValidationHere(function(valid) {
            if(!valid) { return; }

            // Submit (do the actual form post)
            $('#contact-form').trigger('submit', {valid: true});
        });
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42753474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档