【问题标题】:How do I cancel form submission in submit button onclick event?如何在提交按钮 onclick 事件中取消表单提交?
【发布时间】:2010-11-19 16:25:02
【问题描述】:

我正在开发一个 ASP.net Web 应用程序。

我有一个带有提交按钮的表单。提交按钮的代码类似于<input type='submit' value='submit request' onclick='btnClick();'>

我想写如下内容:

function btnClick() {
    if (!validData())
        cancelFormSubmission();
}

我该怎么做?

【问题讨论】:

标签: javascript html forms html-input


【解决方案1】:

你最好这样做......

<form onsubmit="return isValidForm()" />

如果isValidForm() 返回false,则您的表单不会提交。

您还应该将事件处理程序从内联中移出。

document.getElementById('my-form').onsubmit = function() {
    return isValidForm();
};

【讨论】:

  • 很好,但我似乎无法让onsubmit 在我使用 ASP.net 时工作,因为 asp.net 以自己的形式包装了所有内容......
  • 你可以使用他的第二个建议。无论如何,内联 javascript 都是魔鬼。
  • 如果您使用的是 ASP.NET Web 表单(提示:不要),请不要尝试包含其他表单。它们简直是不相容的。我听说 ASP.NET MVC 允许您使用惯用标记构建 Web 应用程序。
  • @David,如果使用其他表单与 ASP.net web 表单不兼容,那我应该只使用服务器端控件吗?
  • 其他人的回答和你一样stackoverflow.com/a/23604664/1639385。我认为这太巧合了。
【解决方案2】:

将您的输入更改为:

<input type='submit' value='submit request' onclick='return btnClick();'>

并在你的函数中返回 false

function btnClick() {
    if (!validData())
        return false;
}

【讨论】:

    【解决方案3】:

    你需要改变

    onclick='btnClick();'
    

    onclick='return btnClick();'
    

    cancelFormSubmission();
    

    return false;
    

    也就是说,我会尽量避免固有事件属性,而使用具有良好事件处理 API 并与真正重要的事件(即表单的提交事件而不是按钮的点击事件)。

    【讨论】:

    • 使用 onclick 将允许用户点击回车并绕过检查。
    【解决方案4】:

    有时onsubmit 不适用于 asp.net。

    我用很简单的方法解决了。

    如果我们有这样的表格

    <form method="post" name="setting-form" >
       <input type="text" id="UserName" name="UserName" value="" 
          placeholder="user name" >
       <input type="password" id="Password" name="password" value="" placeholder="password" >
       <div id="remember" class="checkbox">
        <label>remember me</label>
        <asp:CheckBox ID="RememberMe" runat="server" />
       </div>
       <input type="submit" value="login" id="login-btn"/>
    </form>
    

    您现在可以在表单回发之前捕获该事件并停止回发并使用此 jquery 执行您想要的所有 ajax。

    $(document).ready(function () {
                $("#login-btn").click(function (event) {
                    event.preventDefault();
                    alert("do what ever you want");
                });
     });
    

    【讨论】:

      【解决方案5】:

      您应该将类​​型从submit 更改为button

      <input type='button' value='submit request'>
      

      而不是

      <input type='submit' value='submit request'>
      

      然后,您可以在 javascript 中获取按钮的名称并将您想要的任何操作关联到它

      var btn = document.forms["frm_name"].elements["btn_name"];
      btn.onclick = function(){...};
      

      为我工作 希望有帮助。

      【讨论】:

        【解决方案6】:

        你需要return false;:

        <input type='submit' value='submit request' onclick='return btnClick();' />
        
        function btnClick() {
            return validData();
        }
        

        【讨论】:

          【解决方案7】:

          这是一个非常古老的线程,但肯定会引起注意。因此请注意,提供的解决方案不再是最新的,而现代 Javascript 更好。

          <script>
          document.getElementById(id of the form).addEventListener(
              "submit",
              function(event)
              {
                  if(validData() === false)
                  {
                      event.preventDefault();
                  }
              },
              false
          );
          

          表单接收一个监控提交的事件处理程序。如果调用函数 validData(此处未显示)返回 FALSE,则调用方法 PreventDefault,该方法禁止提交表单,浏览器返回输入。否则表格将照常发送。

          附:这也适用于属性onsubmit。那么匿名函数function(event){...}必须在表单的属性onsubmit中。这不是很现代,您只能使用一个事件处理程序进行提交。但是您不必创建额外的 javascript。另外,可以直接在源代码中指定为表单的属性,无需等到表单集成到DOM中。

          【讨论】:

            【解决方案8】:

            为什么不将提交按钮更改为常规按钮,并在点击事件中提交您的表单,如果它通过了您的验证测试?

            例如

            <input type='button' value='submit request' onclick='btnClick();'>
            
            function btnClick() { 
                if (validData()) 
                    document.myform.submit();
            } 
            

            【讨论】:

            【解决方案9】:

            您需要onSubmit。不是onClick,否则有人可以按回车键,它会绕过您的验证。至于取消。你需要返回false。代码如下:

            <form onSubmit="return btnClick()">
            <input type='submit' value='submit request'>
            
            function btnClick() {
                if (!validData()) return false;
            }
            

            Edit onSubmit 属于表单标签。

            【讨论】:

            • 这行不通。如果数据有效,则不返回 true。把返回真;在 btnClick() 函数的末尾
            【解决方案10】:

            很简单,返回false即可;

            下面的代码在使用 jquery 的提交按钮的 onclick 中..

            if(conditionsNotmet)
            {
            return false;
            }
            

            【讨论】:

              【解决方案11】:

              使用 JQuery 更加简单:在 Asp.Net MVC 和 Asp.Core 中工作

              <script>
                  $('#btnSubmit').on('click', function () {
              
                      if (ValidData) {
                          return true;   //submit the form
                      }
                      else {
                          return false;  //cancel the submit
                      }
                  });
              </script>
              

              【讨论】:

                【解决方案12】:

                使用onclick='return btnClick();'

                function btnClick() {
                    return validData();
                }
                

                【讨论】:

                • 按回车将绕过检查。使用 onSubmit
                【解决方案13】:
                function btnClick() {
                    return validData();
                }
                

                【讨论】:

                • 有必要做更多的事情才能让它发挥作用。我试过让 functino 返回 true 或 false,但似乎没有任何区别。
                • 他的回答是正确的。赞成。您还必须在输入标签中返回它
                • 另外,我宁愿使用ev.preventDefault()ev.returnValue = false 来取消默认行为但不阻止事件冒泡,以防其他控件在同一元素上观察到同一事件。仅当您想阻止事件冒泡取消默认操作时,才使用return false。见this article
                • 必须在事件处理程序本身中返回它是答案中缺少的重要信息。没有它,答案是不完整的,也不足以值得一票。
                【解决方案14】:
                <input type='button' onclick='buttonClick()' />
                
                <script>
                function buttonClick(){
                    //Validate Here
                    document.getElementsByTagName('form')[0].submit();
                }
                </script>
                

                【讨论】:

                • 为了得到一个有用的答案,这个反应需要扩展。解释为什么这是问题的答案。
                猜你喜欢
                • 2015-08-19
                • 1970-01-01
                • 2010-09-12
                • 2011-01-05
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多