2010-02-23 79 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

相关问题