Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单击后禁用asp.net按钮以防止双击_Javascript_Jquery_Asp.net_Asp.net Ajax - Fatal编程技术网

Javascript 单击后禁用asp.net按钮以防止双击

Javascript 单击后禁用asp.net按钮以防止双击,javascript,jquery,asp.net,asp.net-ajax,Javascript,Jquery,Asp.net,Asp.net Ajax,我有一个ASP.NET按钮,我需要在用户单击后禁用它,以防止双击。提交完成后,必须再次启用它。有人能帮我吗?你可以用javascript来完成。在您的表单标记中,onsubmit=“javascript:this.getElementById(“submitButton”).disabled='true';”禁用OnClick事件上的按钮,然后重新启用AJAX回调事件处理程序。下面是我如何使用jQuery实现它的 <script> $(document).ready(function

我有一个ASP.NET按钮,我需要在用户单击后禁用它,以防止双击。提交完成后,必须再次启用它。有人能帮我吗?

你可以用javascript来完成。在您的
表单
标记中,
onsubmit=“javascript:this.getElementById(“submitButton”).disabled='true';”
禁用OnClick事件上的按钮,然后重新启用AJAX回调事件处理程序。下面是我如何使用jQuery实现它的

<script>
$(document).ready(function() {

    $('#buttonId').click(function() {
         $(this).attr('disabled', 'disabled');
         callAjax();
    });

});

function callAjax()
{
    $.ajax({
      url: 'ajax/test.html',
      success: function(data) {
         //enable button
         $('#buttonId').removeAttr('disabled');

      }
    });
}
</script>

$(文档).ready(函数(){
$('#buttonId')。单击(函数(){
$(this.attr('disabled','disabled');
callAjax();
});
});
函数callAjax()
{
$.ajax({
url:'ajax/test.html',
成功:功能(数据){
//启用按钮
$('#buttonId').removeAttr('disabled');
}
});
}

您可以使用客户端事件执行以下操作:

yourButton.Attributes.Add("onclick", "this.disabled=true;");
我发现,它是有效的:

btnSave.Attributes.Add(
    "onclick", 
    "this.disabled = true;" + ClientScript.GetPostBackEventReference(btnSave, null) + ";");
使用jQuery:

$('form').submit(function(){
    $(':submit', this).click(function() {
        return false;
    });
});

检查此链接是最简单的方法,它不会禁用验证

如果你有

  <form id="form1" runat="server">
      <asp:Button ID="Button1" runat="server" Text="Button1" OnClick="Button1_Clicked" />
  </form>

然后你可以用

  <script type = "text/javascript">
  function DisableButton() {
      document.getElementById("<%=Button1.ClientID %>").disabled = true;
  }
  window.onbeforeunload = DisableButton;
  </script>

函数禁用按钮(){
document.getElementById(“”).disabled=true;
}
window.onbeforeunload=禁用按钮;

在验证成功后禁用该按钮,就像页面执行服务器回发一样。

这适用于常规html按钮

    <input id="Button1"
    onclick="this.disabled='true';" type="button"
    value="Submit" name="Button1"
    runat="server" onserverclick="Button1_Click">


在回发完成之前,该按钮将被禁用,从而防止双击。

以下是一个适用于asp.net按钮对象的解决方案。在前端,将以下属性添加到asp:按钮定义中:

<asp:Button ... OnClientClick="this.disabled=true;" UseSubmitBehavior="false" />

我喜欢禁用按钮并调用回发,这样在禁用按钮后,隐藏的代码仍然可以运行

这是我如何从代码隐藏附加的:

btnProcess.Attributes.Add("onclick", " this.disabled = true; __doPostBack('btnProcess', ''); return false;")
btnProcess.Enabled = True
然后重新启用代码隐藏中的按钮:

btnProcess.Attributes.Add("onclick", " this.disabled = true; __doPostBack('btnProcess', ''); return false;")
btnProcess.Enabled = True

试试这个,它对我有用

<asp:Button ID="button" runat="server" CssClass="normalButton" 
Text="Button"  OnClick="Button_Click" ClientIDMode="Static" 
OnClientClick="this.disabled = true; setTimeout('enableButton()', 1500);" 
UseSubmitBehavior="False"/>  

然后


函数启用按钮(){
document.getElementById('button')。disabled=false;
}
您可以在“设置超时”中调整延迟时间。


功能禁用按钮(){
var inputs=document.getElementsByTagName(“输入”);
用于(输入中的var i){
if(输入[i]。类型==“按钮”| |输入[i]。类型==“提交”){
输入[i]。禁用=真;
}
}
}
window.onbeforeunload=禁用按钮;



函数禁用按钮()
{
document.getElementById(“”).disabled=true;
}
window.onbeforeunload=禁用按钮;

如果要防止由于响应缓慢的服务器端代码而导致双击,则此操作可以正常工作:

<asp:Button ... OnClientClick="this.disabled=true;" UseSubmitBehavior="false" />

尝试将Threading.Thread.Sleep(5000)放在服务器上的_Click()事件上,您将看到该按钮在服务器处理Click事件时被禁用


也不需要服务器端代码来重新启用按钮

如果有人在意,我最初发现了这篇文章,但我在页面上使用了ASP.NET的内置验证。解决方案可以工作,但即使按钮已验证,也请禁用该按钮。您可以使用下面的代码,使其仅在通过页面验证时禁用按钮

<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Submit" OnClientClick=" if ( Page_ClientValidate() ) { this.value='Submitting..'; this.disabled=true; }" UseSubmitBehavior="false" />

如果您使用asp.net验证程序,则此解决方案有效:

<script language="javascript" type="text/javascript">
function disableButton(sender,group)
{
    Page_ClientValidate(group);
    if (Page_IsValid)
    {
        sender.disabled = "disabled";
        __doPostBack(sender.name, '');
    }
}</script>

功能禁用按钮(发件人、组)
{
页面\客户端验证(组);
如果(第页有效)
{
sender.disabled=“disabled”;
__doPostBack(sender.name“”);
}
}
并更改按钮:

<asp:Button runat="server" ID="btnSendMessage" Text="Send" OnClick="btnSendMessage_OnClick" OnClientClick="disableButton(this,'theValidationGroup')" CausesValidation="true" ValidationGroup="theValidationGroup" />

只需为asp按钮添加两个属性:

OnClientClick="this.disabled='true';"  UseSubmitBehavior="false"
e、 g


这是一个简单的按钮。在您想要的代码完成后,enable=false这是一个正常的回发还是AJAX?如果您不想逐个按钮解决这个问题,请参阅我的另一个问题的答案:非常适合我需要完成的任务。您还可以添加
this.style.backgroundcolor='#abcdef'更改元素的样式方面。这非常有效。只想强调一下
使用submitbehavior=“false”
的必要性,否则,您的按钮单击将不会触发代码隐藏。@ShawnGavett您到底在哪里添加该行?@Zizzipupp-您可以创建一个CSS类,并将其应用于按钮上的
CssClass
属性,或者您可以使用
style
属性创建内联样式。什么是clientScript?我相信他们指的是Page.clientScript(在System.Web.UI命名空间中)为什么
getElementById('button')
?会吗?不幸的是,这似乎不起作用。在等待帖子完成时,该按钮仍处于启用状态(这意味着您可以多次单击)。非常好的解决方案!,这对我来说非常好,谢谢!!。这是我能找到的唯一有效的答案!更好的是,按钮会更改,让用户知道它正在提交(没有巨大的DIV覆盖或其他废话!)在asp.net的第一天,我的按钮被禁用,但再也不会被启用,我可能会丢失什么它不起作用。我的按钮仍处于启用状态,我可以在它仍在处理响应时再次单击它。您将此代码放在何处?如果它是一个独立脚本,如何从c#代码隐藏中调用它?也可以这样做,棘手的部分是生成Id,因此如果放入独立脚本,则需要将其传递到函数中。
<script language="javascript" type="text/javascript">
function disableButton(sender,group)
{
    Page_ClientValidate(group);
    if (Page_IsValid)
    {
        sender.disabled = "disabled";
        __doPostBack(sender.name, '');
    }
}</script>
<asp:Button runat="server" ID="btnSendMessage" Text="Send" OnClick="btnSendMessage_OnClick" OnClientClick="disableButton(this,'theValidationGroup')" CausesValidation="true" ValidationGroup="theValidationGroup" />
OnClientClick="this.disabled='true';"  UseSubmitBehavior="false"
<asp:Button ID="Button1" runat="server" Text="TEST" OnClientClick="this.disabled='true';"  UseSubmitBehavior="false" CssClass="button-content btnwidth" OnClick="ServerSideMethod_Click"  />