2010-02-23 112 views
0

這是一個在很多論壇上反覆提出的問題,我有一個工作解決方案,但它很醜陋。 我需要在點擊後禁用按鈕以防止雙重提交表單。我通過更改css類來實現這一點,這將禁用和調暗圖像。由於JavaScript包含了litteral和生成的部分,而且我混合了客戶端id和服務器端代碼,所以我最終得到了3個相同的函數。有沒有辦法讓我可以擁有一個適用於所有3個按鈕的功能?混合服務器和客戶端控件,事件處理

<asp:ImageButton ID="btnSubmit" runat="server" 
     OnClientClick="doSubmitAndDisable();" OnClick="btnSubmit_Click"/> 
<asp:ImageButton ID="btnSubmitMore" runat="server" 
     OnClientClick="doSubmitNextAndDisable();" OnClick="btnSubmitMore_Click"/> 
<asp:ImageButton ID="btnSubmitNext" runat="server" 
     OnClientClick="doSubmitMoreAndDisable();" OnClick="btnSubmitNext_Click"/> 
<script type="text/javascript"> 
function doSubmitAndDisable() { 
if (typeof(Page_ClientValidate) == 'function' && Page_ClientValidate() == false){ 
    return false; 
}  
document.all.<%= btnSubmit.ClientID%>.className = 'disabled'; 
document.all.<%= btnSubmitNext.ClientID%>.className = 'disabled'; 
document.all.<%= btnSubmitMore.ClientID%>.className = 'disabled'; 
<%= ClientScript.GetPostBackEventReference(btnSubmit, string.Empty) %>;  
} 
function doSubmitNextAndDisable() { 
if (typeof(Page_ClientValidate) == 'function' && Page_ClientValidate() == false){ 
    return false; 
}  
document.all.<%= btnSubmit.ClientID%>.className = 'disabled'; 
document.all.<%= btnSubmitNext.ClientID%>.className = 'disabled'; 
document.all.<%= btnSubmitMore.ClientID%>.className = 'disabled'; 
<%= ClientScript.GetPostBackEventReference(btnSubmitNext, string.Empty) %>; 
} 
function doSubmitMoreAndDisable() { 
if (typeof(Page_ClientValidate) == 'function' && Page_ClientValidate() == false){ 
    return false; 
}  
document.all.<%= btnSubmit.ClientID%>.className = 'disabled'; 
document.all.<%= btnSubmitNext.ClientID%>.className = 'disabled'; 
document.all.<%= btnSubmitMore.ClientID%>.className = 'disabled'; 
<%= ClientScript.GetPostBackEventReference(btnSubmitMore, string.Empty) %>; 
} 
</script>  

回答

0

而不是生成您的JavaScript的一部分,編寫JavaScript函數,可以在參數或什麼的ID作爲參數。

考慮編寫一個init函數,您可以在其中設置您的ID和其他任何您可能需要的變量。在頁面中,您可以調用init函數並傳入所有服務器生成的ID。

這會給你更堅實的Javascript,你也可以最終將它移動到一個單獨的文件,允許你利用客戶端緩存。

0

我同意,使用方法來幫助減少代碼,或使用JavaScript類來構造它,該類可以接受按鈕集合並相應地處理它們。

如果您正在尋找點擊某個按鈕被禁用的自動功能,我創建了一個框架,其中包含一個按鈕,您可以設置一個屬性DisableOnClick,單擊該按鈕後禁用按鈕,如果您需要它甚至可以在X毫秒後再次使用它。它在http://nucleo.codeplex.com無恥插頭我知道,我知道:-)

HTH。

+0

我很欣賞鏈接,但正如你所看到的,我不僅需要禁用被點擊的控件,這是微不足道的,而且其他的也是如此。 – cdonner 2010-02-23 21:49:02

相關問題