2012-04-25 104 views
-1

在Button的Click事件上,ow可以禁用按钮,还可以调用其事件处理程序?单击按钮:禁用并执行按钮的处理程序

我已经试过这样:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Button1.Enabled = false; 
} 

这并不在IE,Mozilla或Chrome浏览器。

+1

请做在客户端只** **。 – gdoron 2012-04-25 15:51:23

+0

编辑你的问题,确切地说明你想要发生什么。您在此处发布的代码确实会在代码返回时禁用该按钮,以及该方法中运行的其他任何代码。 – 2012-04-25 15:53:41

+0

通过JavaScript做到这一点 - 它更简单,基于客户端的工作,而不是服务器(如果1000/10000/100000用户执行相同的操作,该怎么办?) – 2012-04-25 15:58:47

回答

-1
<asp:Button ... OnClientClick="disableButton(this);" /> 

<script type="text/javascript"> 
function disableButton(button) 
{ 
//need to delay a few ms so that the button posts back before being disabled 
    var buttonToDisable = button; 
    setTimeout("reallyDisableButton()"), 2); 
} 

function reallyDisableButton() 
{ 
    buttonToDisable.disabled = true; 
} 
</script> 

我认为你的问题是,人们在点击一个按钮几次(因为页面是采取一段时间来加载),从而拉开事件几次,你只希望他们能够做到它曾经。这会在回发后禁用按钮,防止意外发送多个并发回发。

+0

...或者取消对延迟,你可以先禁用按钮,然后调用'__doPostBack('Button1','');'你自己后跟'e.preventDefault();'以防止原始回发。 – 2012-04-25 16:09:45

+0

@Scott这不像用户会看到延迟;它对他们来说似乎是即时的。 – Servy 2012-04-25 16:16:26

+0

我明白这一点。简单地说,我喜欢控制什么时候事情发生。让它延迟以允许完成默认机制来触发回发的功能,并不是最受控制的解决方案。我觉得自己可以更好地控制它,这样它会触发回发,并且因为我告诉它而取消默认功能。再次,这只是一个控制偏好的事情。 – 2012-04-25 16:21:56

0

你可以尝试添加此:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    // Do some stuff here 

    Button1.Attributes.Add("onclick", "javascript:return false;"); 
    Button1.Enabled = false; 
}