javascript - 使用 jQuery 提交 HTML 表单不起作用

标签 javascript jquery html forms

TL;DR: 我尝试使用 jQuery 提交表单,但它不起作用。

当用户提交表单时,我需要执行 ajax 调用。表单的操作位于我的网站之外,因此我需要在实际提交之前捕获表单提交。
这在某些时候确实有效,但现在不起作用,由于某种原因我无法弄清楚,我比较了它停止工作之前和之后的提交,并且没有代码更改,所以我不知道它可能是什么.
表单是常规的,有POST方法,一个 Action ,没什么奇怪的。
有什么想法吗?

这个想法是,当用户提交表单时,提交处理程序会阻止常规提交并执行 Ajax 调用。
当 AJAX 调用返回时,再次调用提交事件,这次处理程序不执行任何操作,也不会阻止常规提交,返回 true,因此它应该将表单提交到其操作 URL,但它没有发生。

<script>
var do_ajax_submit = true;

function manual_submit() {
    do_ajax_submit = false;
    $("form#lead_subscribe").submit();
}

$(function(){
    $("form#lead_subscribe").submit( function( ev )
    {
        var das = do_ajax_submit;
        if( do_ajax_submit )
        {
            do_ajax_submit = false;
            ev.preventDefault();

            $.ajax({
                url: "/someAjaxCall",
                method: "POST",
            })
            .always( function() {
                manual_submit();
            });
            return false;
        }
        return true;
    });
});
</script>

最佳答案

目前尚不清楚为什么代码应该可以工作,然后又停止工作。

有一件事是肯定的。通过使用原生的 formNode.submit 而不是 jQuery 的 $("form#lead_subscribe").submit(); 触发表单提交,提交将不会被重新拦截事件处理程序。因此,do_ajax_submit 标志是不必要的,并且 JavaScript 会显着清理。

$(function() {
    $("form#lead_subscribe").on('submit', function(ev) {
        ev.preventDefault();
        var formNode = this;
        $.ajax({
            url: "/someAjaxCall",
            method: "POST"
        })
        .always(function() {
            formNode.submit(); // native .submit() will not be re-intercepted by this submit handler.
        });
    });
});

这次清理也有可能解决问题。很难说。

关于javascript - 使用 jQuery 提交 HTML 表单不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45382652/

相关文章:

javascript - jquery 可以为 css 背景属性设置动画吗?

javascript - Windows Phone 8 和 Phonegap : how to close app with back button

javascript - AJAX 调用后刷新 ViewModel 和 View

html - CSS 优先级是如何工作的?

javascript - 在 2 个 CSS 工作表之间切换

javascript - Angular 2 : Typescript : Filter grid data based on provided filter condition

javascript - 将 div 向下移动一次超过某个点

jquery - 在 IE8 中应用旋转过滤器并更改纵横比

html - 如何更新 element.styles css

javascript - 使用 javascript 保留文本字段的值