【问题标题】:stop form submit not work properly [duplicate]停止表单提交无法正常工作[重复]
【发布时间】:2012-09-10 06:00:01
【问题描述】:

可能重复:
submit form does not stop in jquery ajax call

我有一个表格:

<form id="orderForm" onsubmit="return prepareOrder(this);" action='@ConfigurationManager.AppSettings["EpayLogonUrl"]' method="POST">

还有prepareOrder函数:

function prepareOrder(form) {
    $('.wizard_next_step').attr('disabled', 'disabled');
    $('.wizard_next_step').addClass('disabled');
    $('.wizard_prev_step').attr('disabled', 'disabled');
    $('.wizard_prev_step').addClass('disabled');       

    $.ajax({
        type: 'POST',
        url: '/Pay/CreateOrder',
        success: function (response) {
            if (response.IsSuccess) {
                alert('2');
                $("input[type=hidden][name=Signed_Order_B64]").val(response.Message);
            } else {
                alert('1');
                toastr.options.timeOut = 10000;
                toastr.info(response.Message);
                return false;
            }
        },
        error: function () {
            return false;
        },
        async: false
    });
}

IsSuccess 等于 false 时提交不会停止的问题。为了测试,我正确插入警报和警报显示(1),但无论如何都要提交表单。哪里出了问题?

【问题讨论】:

  • 而不是return false; 执行returnVal = false; 并且,prepareOrder 的末尾,执行return returnVal == false ? false : true;
  • @goldenparrot - 你为什么不最后做return returnVal;
  • @goldenparrot:你为什么要这么做?只需return false;
  • @WesleyMurch - 这里的想法是根据(同步)Ajax 响应有条件地停止提交。 (大概需要某种预先验证,尽管我不会那样编码。)
  • @nnnnnn:我读错了整件事,我累了,去睡觉吧;)祝你好运user1260827

标签: javascript jquery forms


【解决方案1】:

您的 ajax 调用返回 false,但您的 prepareOrder 方法不是。 尝试在 ajax 调用之外返回 false:

function prepareOrder(form) {
    $('.wizard_next_step').attr('disabled', 'disabled');
    $('.wizard_next_step').addClass('disabled');
    $('.wizard_prev_step').attr('disabled', 'disabled');
    $('.wizard_prev_step').addClass('disabled');       

    $.ajax({
        type: 'POST',
        url: '/Pay/CreateOrder',
        success: function (response) {
            if (response.IsSuccess) {
                alert('2');
                $("input[type=hidden][name=Signed_Order_B64]").val(response.Message);
            } else {
                alert('1');
                toastr.options.timeOut = 10000;
                toastr.info(response.Message);
                return false;
            }
        },
        error: function () {
            return false;
        },
        async: false
    });

    return false;    
}

【讨论】:

  • 在 netsted 函数的情况下,return 将返回内部函数的值。
  • @Pawan - 不会,它会返回 return 关键字之后的任何内容(如果没有提供值,则返回 undefined)。
猜你喜欢
  • 2018-10-21
  • 2014-01-23
  • 2018-02-09
  • 2019-11-10
  • 1970-01-01
  • 2017-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多