使用JavaScript禁用服务器端按钮的提交行为是否可行?

3

使用JavaScript禁用服务器端按钮的提交行为是否可能?注意:我不想禁用按钮,用户将单击该按钮,但它不会提交/获取任何来自服务器的值。

场景:

 <asp:Button ID="Button1" runat="server" Text="Submit"  onclick="Button1_Click"  OnClientClick="Check()" />

JavaScript:

function Check() 
{
  var res = confirm(" Are u sure whatYou have selected ")
  if (res) 
  {
    alert("yes");
  }
  else {
    //Here I need to disable the submit behavoiur                        
  }
 }
}
}
7个回答

9

您需要确保在标记中将UseSubmitBehavior设置为false,然后在调用postback javascript之前返回false。


编辑:

您应该返回函数的值,在函数中如果您想要一个postback,请返回true,如果不想要,则返回false。

<asp:Button ID="Button1" runat="server" Text="Submit"  onclick="Button1_Click"  
  OnClientClick="return Check();" UseSubmitBehavior="false" />

Javascript:

function Check()
{
     return confirm(" Are u sure whatYou have selected ");
}

1
通过您发布的更新代码,您的回答完全解决了问题 +1 - ichiban

3

当提交按钮的点击处理程序返回false时,确保不会提交表单。


1
<input type='submit' onclick='return false;' />

如果在ASP.NET中没有以不同的方式完成,可以尝试类似这样的方法。


0
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
    <script>
    function dostuff() {
    alert('hello');
    }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <% =DateTime.Now.ToString() %>
        <asp:Button ID="Mybutton" runat="server" UseSubmitBehavior="false" Text="Click"
        OnClientClick="dostuff(); return false;" />
    </div>
    </form>
</body>
</html>

0

我不建议使用其他方法,因为它们存在两个问题:

  1. Javascript 不应该嵌入在 HTML 中。这是一种不好的形式,现在已经是一种过时的做法了。关于这个问题有很多讨论。
  2. 点击提交按钮并不是提交表单的唯一方式。如果用户按下回车键,你仍然会遇到问题,因为 onclick 处理程序根本不会被触发。

在你的情况下,你只需要在你的 else 块中包含以下内容:

document.getElementById("YourFormId").onsubmit = function() { return false; }

所以事件是在你的表单上而不是按钮上,它是一个onsubmit事件。


这些答案被点赞是因为它们有效。该问题与ASP.NET按钮在点击时执行回发相关。在ASP.NET中,服务器端声明的每个按钮都像HTML表单提交按钮一样运作。 - ichiban
问题明确要求用户在提交之前验证其信息。这应该在onsubmit中处理,而不是onclick中。无论您是否使用ASP.NET,标记都不应包含Javascript或CSS--正如我所提到的,这些方法已经过时了。 - aleemb
ASP.NET已经超越了最佳实践,它本身就是一种不好的实践,如果你试图干净地分离关注点,它会在每一个步骤中与你作斗争。我同意,无论你使用什么,你都应该能够按照自己的方式去做。但说真的,孩子们,如果你还在用ASP.NET构建东西,那么现在是时候学习一些新的东西,否则你只能为遗留系统工作而失业。这在2009年是正确的,就像我在寻找一种规避asp.net postback行为的方法时,在2013年写的某个东西中发现的一样。 - Erik Reppen

0

对我来说,使用

OnClientClick="if (!confirm('你确定吗?')) return false;"

而不是

1-OnClientClick="return confirm('你确定吗?'))"

或者

2-OnClientClick="confirm('你确定吗?'))"

解决了这个问题。

<asp:Button UseSubmitBehavior="false" OnClientClick="if (!confirm('are you sure?')) return false;" >

0

只需返回 false,将其放在客户端单击事件内部即可,这样不会继续提交(或在 asp.net 中执行 __doPostBack())


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接