如何禁用ASP按钮上的回发


135

我有一个asp按钮。它是服务器端的,所以我只能向登录的用户显示它,但是我希望它运行javascript函数,并且似乎在runat =“ server”时始终调用回发事件。

我还有一个常规按钮(<input...>)不在服务器上运行,并且工作正常...

如何使此按钮仅运行javascript而不能回发?

Answers:


263

完成后让您的JavaScript返回false。

<asp:button runat="server".... OnClientClick="myfunction(); return false;" />

16
在许多情况下,人们使用带有<asp:Button OnClientClick =“ myFunction()” />语法的onclick或OnClientClick,其中myFunction()返回false,这还不够-您必须使用OnClientClick =“ return myFunction()”
布朗·戴维斯

17
我必须添加UseSubmitBehavior =“ False”以及; return false
rob

9
确保添加'CausesValidation =“ false”',否则将添加'WebForm_DoPostBackWithOptions'和许多额外的标记。
卡特·梅德林

在ASP.NET 4+中,这对我不起作用,但是Konstantin的回答很简单OnClientClick="return false"
TylerH


15

您可以使用jquery click操作并使用preventDefault()函数来避免回发

<asp:button ID="btnMyButton" runat="server" Text="MyButton" />


$("#btnMyButton").click(function (e) {
// some actions here
 e.preventDefault();
}

这是一个很好的答案,因为它允许您测试要禁用的条件。
约翰·莫特

1
切勿使用preventDefault,因为它将停止依赖此事件-1的其他事件
Piotr Kula

1
@ppumkin:preventDefault是告诉其他事件侦听器您已处理此事件的好方法,因此他们不必这样做。我认为您的意思是stopPropagation,它确实阻止了该事件甚至被其他事件侦听器听到。
塞巴斯

是的。没有。4年后,我现在更加支持这一目标。只是不做任何事情。
Piotr Kula

8

考虑一下。

<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequest);
function BeginRequest(sender, e) {
    e.get_postBackElement().disabled = true;

}
     </script>


4

ASP.NET总是产生asp:Button作为input type=submit
如果您想要一个不执行发布但需要对服务器端元素进行某些控制的按钮,请创建一个具有属性type=button和的简单HTML输入runat=server

如果您禁用执行点击操作OnClientClick=return false,除非您创建类似以下的功能,否则它将不会对点击执行任何操作:

function btnClick() {
    // do stuff
    return false;
}

3

您没有说要使用哪个版本的.NET框架。

如果您使用的是v2.0或更高版本,则可以在引发按钮的onclick事件时使用OnClientClick属性执行Javascript函数。

为防止发生服务器回发,您所要做的就是false从被调用的JavaScript函数返回。


3

此外,对于可接受的答案,您可以使用UseSubmitBehavior =“ false” MSDN


ASP.NET添加; __doPostBack(到客户端单击脚本的末尾。
IvanH 2014年

3

就我而言,我解决了在onClientClick中添加return的问题:

背后的代码

function verify(){
  if (document.getElementById("idName").checked == "") {
    alert("Fill the field");
    return false;
  }
}

设计图面

<asp:Button runat="server" ID="send" Text="Send" onClientClick="return verify()" />

之后如何运行OnClick方法。
5377037 '11

2

您可以使用以下代码:

<asp:Button ID="Button2" runat="server"
     Text="Pulsa"
     OnClientClick="this.disabled=true"
     UseSubmitBehavior="False"/>

如果需要

...
<form id="form1" runat="server" onsubmit="deshabilita()">
...
<script type="text/javascript">
    function deshabilita()
    {
        var btn = "<%= Button1.ClientID %>";
        if (confirm("Confirme postback"))
        {
            document.getElementById(btn).disabled = true;
            return true;
        }
        return false;
    }
</script>


2

有验证

在此示例中,我使用了两个控件ddltxtbox,它们的编码很愉快

 asp:ScriptManager ID="script1" runat="server" /asp:ScriptManager

    asp:UpdatePanel ID="Panel1" runat="server"
       ContentTemplate

// ASP BUTTON
asp:Button ID="btnSave" runat="server" Text="Save" class="btn btn-success" OnClientClick="return Valid()" OnClick="btnSave_Click"


   /ContentTemplate    
    /asp:UpdatePanel    

  <script type="text/javascript">
        function Valid() {

            if ($("#ctl00_ContentPlaceHolder1_YOUR CONTROL NAME").val() == 0) {
                alert("Please select YOUR TEXT");
                $("#ctl00_ContentPlaceHolder1_YOUR CONTROL NAME").focus();
                return false;
            }

            if ($("#ctl00_ContentPlaceHolder1_YOUR CONTROL NAME").val().length == 0) {
                alert("Please Type YOUR TEXT");
                $("ctl00_ContentPlaceHolder1_YOUR CONTROL NAME").focus();
                return false;
            }
            return true;
        }
</script>

2

您可以为此使用JQuery

<asp:Button runat="server" ID="btnID" />

比在JQuery中

$("#btnID").click(function(e){e.preventDefault();})
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.