2012-08-06 105 views
0

我有一個按鈕上的JavaScript,點擊後將文本轉換爲「等待...」。問題是,在Mozilla上它在點擊後被執行了兩次。這是代碼:按鈕onClick在Mozilla上執行兩次

System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
    sb.Append("if (typeof(Page_ClientValidate) == 'function') { "); 
    sb.Append("if (Page_ClientValidate() == false) { return false; }} "); 
    sb.Append("this.value = 'Please wait...';"); 
    sb.Append("this.disabled = true;");  
    sb.Append(this.Page.ClientScript.GetPostBackEventReference(this.btnSave, "")); 
    sb.Append(";"); 
    this.btnSave.Attributes.Add("onclick", sb.ToString()); 

的HTML是:

<div class="btns-action"> 
    <input type="submit" value="Submit" id="btnSave" runat="server" style="margin-left: 112px;" 
     onserverclick="btnSave_Click" class="ui-button ui-widget ui-state-default ui-corner-all" /> 
    <a href="Login.aspx">Go Back&nbsp;<span class="arr">&raquo;</span></a> 
</div> 

代碼還檢查如果頁面的Valide禁用按鈕之前,因此,如果它是無效的,用戶可以單擊它再次。這就是我爲什麼這樣做的原因。 有沒有解決方案來解決這個問題?謝謝

後來編輯:解決它的一件事是我脫掉了UpdatePanel。整個頁面都在更新面板中。但這不應該是解決方案。

+0

可以喲發佈HTML? – 2012-08-06 07:20:29

+0

好的,我也加了html – bokkie 2012-08-06 07:34:07

+0

我沒有收到你的代碼錯誤,你使用的是什麼版本的firefox? – 2012-08-06 08:12:11

回答

1

如果您添加了OnClick服務器端事件,則不需要最後3行。

+0

如果我採取3下來,等待文本不再出現,按鈕不會被禁用... – bokkie 2012-08-06 07:32:29

0

你可以利用這個javascript函數的幫助下簡單地做:

function CheckEmptyFields(){ 
document.getElementById('<%=btnSave.ClientID %>').disabled = "disabled";   
document.getElementById('<%=btnSave.ClientID %>').value = "Please wait..."; 
<%= ClientScript.GetPostBackEventReference(btnSave, "") %>; 
} 

而在你的按鈕添加此

OnClientClick="CheckEmptyFields();" 

所以,現在你的按鈕應該是:

<asp:Button Text="Submit" id="btnSave" runat="server" style="margin-left: 112px;" 
    onclick="btnSave_Click" OnClientClick="CheckEmptyFields();" class="ui-button ui-widget ui-state-default ui-corner-all" /> 
+0

是的,這將是「簡單」,因爲你稱它,但作爲你請參閱我發佈的代碼,我還需要驗證頁面(客戶端和服務器驗證)。也許我應該強調更多? – bokkie 2012-08-06 08:43:30