【问题标题】:Submit form after event.preventDefault?在 event.preventDefault 之后提交表单?
【发布时间】:2015-07-13 16:56:53
【问题描述】:

我知道这个问题已经被问了一百万次,但我似乎无法让它发挥作用。谁能让我知道我做错了什么。

这是我的代码:

$('#frm').submit(function(event) {
    event.preventDefault();
    var formData = $(this).serialize();
    var email = $('input#email').val();
    if (email == '') {
        alert('Please enter your email address');
        $('input#email').focus();
        return false;
    } else {
        $.post('http://www.domain.com/', formData, function() {
            $('#frm').submit();
        });
    }
});

【问题讨论】:

  • 什么问题???
  • 数据被发布到其他域,但实际表单没有提交。

标签: javascript jquery ajax post


【解决方案1】:

您可以使用DOM节点提交方法提交FORM:

$.post('http://www.domain.com/', formData, function() {
    this.submit(); // 'this' not '$(this)'
}.bind(this)); // 'bind' to set relevant context, or use jq $.proxy(handler, this) to support older browsers

【讨论】:

  • 这不起作用...数据发布得很好,但表单没有提交给操作。我还打算放 $('#frm').submit() 而不是 $(this).submit()。
  • 它适用于我使用 bind(this)this.submit();
【解决方案2】:

这段代码没有意义

    $.post('http://www.domain.com/', formData, function() {
        $(this).submit();
    });

您正在发布,然后,当请求成功返回时,您又尝试在表单上调用提交?

顺便说一下,this 在该上下文中指的是 Ajax 调用的 jqXHR 对象,而不是表单。见$(this) inside of AJAX success not working

【讨论】:

  • 我正在尝试将数据发布到另一个域,同时提交实际表单。
【解决方案3】:

正如大多数答案所说,this 不是对表单的引用。然后您需要为它创建一个引用,如下所示(请参阅that var)。但是,仅当您想稍后在 success 回调中使用它时才需要这样做:

$('#frm').submit(function(event) {

    // Create a reference to your form
    var that = this;

    event.preventDefault();
    var formData = $(this).serialize();
    var email = $('input#email').val();
    if (email == '') {
        alert('Please enter your email address');
        $('input#email').focus();
        return false;
    } else {
        $.post('http://www.domain.com/', formData, function() {

            // On success response do your stuff here and 
            // submit to your 'own domain'  
            // In case you don't have the action attr, give a value to this var.
            var url = $(that).attr('action'); 
            $.post(url, formData, function() {
                // On success response do your stuff here
            });
        });
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    相关资源
    最近更新 更多