按钮onClick在Mozilla上执行两次

时间:2012-08-06 07:16:26

标签: javascript asp.net

我在按钮上有一个javascript,在单击后将文本转换为“等待...”。问题是在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,这样如果它无效,用户可以再次单击它。这就是我这样做的原因。 有解决方案可以解决这个问题吗?感谢

LATER EDIT:解决它的一件事是我取消了UpdatePanel。整个页面都在更新面板中。但这不应该是解决这个问题的方法。

2 个答案:

答案 0 :(得分:1)

如果添加了OnClick服务器端事件,则不需要最后3行。

答案 1 :(得分: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" />