防止重複提交與驗證控制元件配合使用

iDotNetSpace發表於2008-09-09

為了防止重複提交表單,一般情況下都是在點選按鈕後用javascript把提交按鈕設為disabled。在asp.net 下通常是使用OnClientClick來實現。

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt<asp:TextBox ID="txt" runat="server">asp:TextBox>

<asp:Button ID="btn" runat="server" Text="Button" onclick="btn_Click"  OnClientClick="clientclick()" UseSubmitBehavior="false"/>

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt

 

function clientclick()

 

   {
        $(
"#").attr("disabled",true);
   }
</script>

但是這種情況下如果使用了驗證控制元件,在驗證控制元件啟用的時候,按鈕同樣會被disabled掉,造成最後無法提交表單。

其實驗證控制元件啟用的時候就是控制對應span的顯示,我們可以用jquery的選擇器得到對應的span的數量,然後再把按鈕重新啟用就可以了。

我的解決辦法:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt<script type="text/javascript">
   $(document).ready(
function(){
   $(
"#").click(function(){
        
var span=$("span[id*='Validator']:visible");
        
if(span.length>0
        {
            $(
this).attr("disabled",false);
        }
   });
   });
function clientclick()
   {
        $(
"#").attr("disabled",true);
   }
</script>
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt<asp:TextBox ID="txt" runat="server">asp:TextBox>
<asp:Button ID="btn" runat="server" Text="Button" onclick="btn_Click"  OnClientClick="clientclick()" UseSubmitBehavior="false"/>
<asp:RequiredFieldValidator ID="Validator" runat="server" 
        ControlToValidate
="txt" ErrorMessage="RequiredFieldValidator">asp:RequiredFieldValidator>
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtprotected void btn_Click(object sender, EventArgs e)
        {
            
//do someing
        }

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-442648/,如需轉載,請註明出處,否則將追究法律責任。

相關文章