这是一个在很多论坛上反复提出的问题,我有一个工作解决方案,但它很丑陋。 我需要在点击后禁用按钮以防止双重提交表单。我通过更改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>
我很欣赏链接,但正如你所看到的,我不仅需要禁用被点击的控件,这是微不足道的,而且其他的也是如此。 – cdonner 2010-02-23 21:49:02