2012-04-25 117 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; 
}