【问题标题】:Button event isn't firing after disabling the button in IE9 and IE8禁用 IE9 和 IE8 中的按钮后,按钮事件未触发
【发布时间】:2013-07-31 06:38:57
【问题描述】:

我的页面上有一个提交按钮。在客户端单击提交按钮时,我正在使用以下 Javascript 函数:

function SubmitDisable() {
var valid = Page_ClientValidate();
if (valid) {
    document.getElementById("btnSubmit").style.cursor = "wait";
    document.getElementById("btnSubmit").disabled = true;
    document.getElementById("btnSubmit").innerText = "Submitting...";

}
else {
    SubmitEnable();
    ApproveEnable();
   }
 }

它在IE10ChromeAurora 中运行良好,但在IE9IE8 中无法运行。

每当我点击submit button 时,它只会使button 变灰并将其文本更改为Submitting 并且page 挂起。 submit 不是 page

我如何在IE9IE8 中解决这个issue? 期待您的回复。

【问题讨论】:

  • 您是否在不禁用按钮的情况下尝试过此操作?
  • 是的,在此功能之前,它运行良好。

标签: javascript asp.net .net internet-explorer


【解决方案1】:

听起来像使用 ASP.NET 执行此操作需要您调用必要的 doPostBack 按钮已被禁用:

服务器端实现:

protected void Page_Load(object o, EventArgs e) {
  btnSubmit.Attributes.Add("onclick", "SubmitDisable();" + Page.ClientScript.GetPostBackEventReference(btnSubmit, "").ToString());
}

客户端实施:

function SubmitDisable() {
var valid = Page_ClientValidate();
if (valid) {
    document.getElementById("btnSubmit").style.cursor = "wait";
    document.getElementById("btnSubmit").disabled = true;
    document.getElementById("btnSubmit").innerText = "Submitting...";
    <%=Page.ClientScript.GetPostBackEventReference(btnSubmit, "").ToString()%>
}
else {
    SubmitEnable();
    ApproveEnable();
   }
 }

基本上这会将以下代码添加到您的函数中:

__doPostBack('MyPanel$btnSubmit','');

禁用按钮后,强制 .NET 从所需控件执行回发。

【讨论】:

  • 谢谢。它在IE8IE9 中工作。我使用了Server-Side Implementation。但我想使用client side Implementation。我在单独的js 文件中编写了禁用功能。它不支持JS 文件中的Page.ClientScript。有什么替代品吗?
  • @CodeRider 是的,这有点困难,因为您无法在外部文件中处理 GetPostBackEventReference。您必须在页面上包含脚本,或者使用服务器端版本,或者将 doPostBack 的引用传递给您的外部文件,即将它放在您的 .aspx 页面中:&lt;script&gt;function SubmitForm() { &lt;%=Page.ClientScript.GetPostBackEventReference(btnSubmit, "").ToString()%&gt; }&lt;/script&gt; - 然后在你的外部javascript文件你可以在禁用按钮后调用SubmitForm()
【解决方案2】:

我对此感到惊讶,但听起来禁用按钮会阻止提交。

如果是这样,您可以延迟禁用它一个人类无法察觉的量:

function SubmitDisable() {
    var valid = Page_ClientValidate();
    if (valid) {
        var btn = document.getElementById("btnSubmit");
        btn.style.cursor = "wait";
        btn.innerText = "Submitting...";
        setTimeout(function () {
            btn.disabled = true;
        }, 0);
    }
    else {
        SubmitEnable();
        ApproveEnable();
    }
}

这会使按钮在点击事件和表单提交完成期间保持启用状态,但随后在大约 10 毫秒左右的时间内将其禁用。

【讨论】:

  • 让我试试这个。 :)
  • 听起来像是 ASP.Net 妨碍了你,而不是浏览器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
  • 2013-07-02
  • 2016-08-02
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多