【问题标题】:How to submit form within submit handler?如何在提交处理程序中提交表单?
【发布时间】:2013-04-02 09:33:58
【问题描述】:

我想添加一条确认消息,当用户尝试提交表单时会弹出该消息。我想出了以下内容,但这对我来说看起来像是一个黑客。

$('#someform').submit(function () {
  var form = $(this);
  //a hack so that this handler does not fire again, see below
  if (form.attr('data-confirm') == 'disabled') {
    return true;
  }

  showConfirmPopup({
    message: "Are you sure?",
    success: function () {

      form.attr('data-confirm', 'disabled');
      form.submit();

      hideConfirmPopup();
    }
  });

  return false;
})

});

因此,当用户提交表单时,此处理程序将捕获事件并阻止、显示弹出窗口并阻止表单提交(通过返回 false)。当用户确认后,成功处理程序将所有表单提交方法,我们的处理程序将再次触发,但这一次它将返回true 并提交表单。

不写data-confirm属性可以实现吗?

【问题讨论】:

  • 我可能会使用变量而不是属性,但这是相同的想法。
  • 我会选择一个变量。

标签: jquery


【解决方案1】:

在这种情况下,您可以在成功回调中简单地 unbind 您的 submit 处理程序,然后重新提交表单。像这样的东西应该可以解决问题:

...
success: function () {
    hideConfirmPopup();
    form.unbind('submit').submit();
}

【讨论】:

    【解决方案2】:

    简单有什么问题:

    $('#someform').submit(function () {
      var submitForm = false;
      showConfirmPopup({
        message: "Are you sure?",
        success: function () {
          submitForm = true;
          hideConfirmPopup();
        });
      return submitForm;
    });
    

    我假设showConfirmPopup 是同步的。

    【讨论】: