【问题标题】:submit function does not trigger onsubmit return function?提交函数不会触发onsubmit返回函数?
【发布时间】:2016-01-29 14:56:58
【问题描述】:

我想我对 onsubmit 属性有误解。我认为每次提交,如<input type="submit" ...><button></button> 或任何javascript form.submit() 在提交后触发onsubmit="return function();"。换句话说,我永远不会看到“最后触发”的日志。

例子:

function triggerFirst() {
  console.log("first triggered");
  myForm.submit();  
}

function triggerLast() {
  console.log("last triggered");
  return true;
}
<form id="myForm" onsubmit="return triggerLast();">
  <input type="button" onclick="triggerFirst();" value="trigger">
</form>

这个例子永远不会触发onsubmit,为什么?我认为 onsubmit 意味着如果有人提交?是假的吗?

【问题讨论】:

  • 可能是因为submit() is not defined是个错误
  • 我的错误。我添加了一个 id 以通过它显式访问表单。但没有其他行为。

标签: javascript forms onsubmit


【解决方案1】:

有效。

更新: 首先将第二个函数放在里面。

function triggerFirst() {
  alert('wow'); 
triggerLast() 
}

function triggerLast() {
alert('wowpsubmit');
  return true;
}
<form id="myForm" onsubmit='return triggerLast();'>
  <input type="button" onclick="triggerFirst();" value="trigger" >
</form>

【讨论】:

  • 添加一个 myForm.submit();到您的 triggerFirst() 函数中,并将 alter('wow') 添加到您的 triggerLast()。然后你看不到第二个“哇”,所以它不起作用。我的示例不是最好的,我的意思是您在 triggerFirst 中执行某些操作,并且仅在某些情况下您希望 triggerLast() 作为第二次验证。您的示例将永远不会触发 triggerLast() 因为输入不会自动提交或者?
  • 这将适用于此示例,但它是一种解决方法。我认为 form.submit() 会明确调用 onsubmit="return function();"。但似乎只有&lt;input type="submit" ...&gt;&lt;button onclick="first();"&gt;&lt;/button&gt; 会调用它。但是你没有这两个函数之间的联系。
  • 对不起,我还是没明白你的意思
  • 没问题,可能我解释的很模糊。请参阅底部的@Rupert 的答案。他完全按照我的意思做,但是如果我运行它,那么 submit() 函数将提交表单,而不检查 onsubmit="return function()"。
【解决方案2】:

HTML 表单不需要 javascript 即可工作。参考以下代码:

<form action="action_page.php">
  First name:<br>
  <input type="text" name="firstname" value="Mickey"><br>
  Last name:<br>
  <input type="text" name="lastname" value="Mouse"><br><br>
  <input type="submit" value="Submit">
</form>

&lt;form action="action_page.php"&gt; 声明在表单提交后运行。

&lt;input type="submit" value="Submit"&gt; 是触发表单操作运行的内置类型。

查看更多here

【讨论】:

    【解决方案3】:

    在您的 triggerFirst 函数中,内部函数调用 submit 什么也不做。该提交功能未定义。我想在这里你想让函数提交所以下面我将对表单的引用传递给 triggerFirst 函数。这应该为您澄清事情。打开控制台查看输出。

    function triggerFirst(form) {
      console.log('triggerFirst')
      console.log(form);
      form.submit();
    }
    
    function triggerLast() {
      console.log('triggerLast')
      return true;
    }
    <form onsubmit="return triggerLast();">
      <input type="button" onclick="triggerFirst(this.form);" value="trigger">
    </form>

    【讨论】:

    • 这正是我尝试做的,但我永远不会看到 triggerLast 日志:-/。如果我调试它,表单将在 form.submit() 之后提交,并且永远不会进入 triggerLast();
    猜你喜欢
    • 1970-01-01
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 2015-03-29
    • 2012-06-20
    相关资源
    最近更新 更多