单击按钮时,表单将被提交两次

时间:2013-05-02 09:12:49

标签: javascript

我在

上面调用了javascript函数
function formOnSubmit() {
  if (document.forms[0].ref_no.value == "") {
    if (document.forms[0].acc_code.value == "") {
      if (document.forms[0].vendor_code.value == "") {
        if (document.forms[0].acc_service_tax.value == "") {
          if (document.forms[0].acc_doc_name.value == "") {
            alert('Please enter atleast one attribute value');
            return false;
          }
        }
      }
    }
  } else {
    return true;
    document.forms[0].submit();
  }
}

其中, ref_no,acc_code,vendor_code,acc_service_tax,acc_doc_name是文本框

当我在ref_no texbox中输入内容时,表单会被提交两次,而对于其余的文本框,表单会提交一次。

我想知道为什么在输入ref_no值时表单会被提交两次。

8 个答案:

答案 0 :(得分:6)

最后为自己直截了当,并希望其他人。如果您使用"按钮"并且想要使用document.forms[0],submit(),然后指定按钮type="button"。否则,将使用默认按钮类型,即submit,在我的情况下使用 IE ,您的表单将被提交两次。

答案 1 :(得分:5)

添加以下给定的行解决了我的问题。

 e.stopImmediatePropagation();

答案 2 :(得分:3)

如果您在提交的按钮类型的输入上调用该函数,则需要删除以下行:

document.forms[0].submit();

此功能通常应该作为onclick绑定到按钮,实际上只是:

onclick="return formOnSubmit()"

答案 3 :(得分:3)

将您的输入类型“提交”更改为“按钮

例如

<input  type="button" value="submit" onClick=formOnSubmit(); />

答案 4 :(得分:3)

我有同样的问题,但在我的情况下有点不同: 我的代码js:

$btnSave.on('click', function (e) {
    e.preventDefault();
    $formPreRequisites.trigger('submit');
});

我的表格提交:

$myForm.on('submit', function (e) {
    //mythings
});

然后我在“点击”事件中两次调用我的按钮提交时出现此问题。然后我把它放在我的方法中,它的工作原理。这可以防止事件在我的html DOM元素中传播。

$btnSave.on('click', function (e) {
    e.stopImmediatePropagation();
    e.preventDefault();
    $myForm.trigger('submit');
});

答案 5 :(得分:1)

使用处于其他状态的任何一个。

使用:

document.forms[0].submit();

其他

return true;

如果您在其他情况下使用return true,那么函数会调用onSubmit事件中的表单标记。

<form action="//your action" method="//your method" onsubmit="return formOnSubmit()">

答案 6 :(得分:0)

TL; DR

另一个点击处理程序函数中的点击处理程序函数会根据点击总数将同一点击处理程序附加多次

这不是您的示例的解决方案,而是相同问题的解决方案。我添加了一个单击处理程序,以防止表单提交,并使用按钮打开模式。单击模式中的按钮后,应在定义的情况下提交表单。

到目前为止,一切都很好。但是我在模式内部的按钮单击的代码在外部单击处理程序的范围内。因此,在您两次打开模态之后,表单被提交了两次。

答案 7 :(得分:0)

如果您使用函数commit()并在表单中有一个提交按钮,则它肯定会提交两次,将提交按钮转到按钮或删除您称为submit()函数的行