【问题标题】:ASP.NET WebForms/jQuery: jQuery .click event on button keeps button's serverside OnClick event from firingASP.NET WebForms/jQuery:按钮上的 jQuery .click 事件可防止按钮的服务器端 OnClick 事件触发
【发布时间】:2012-07-19 18:24:56
【问题描述】:

我试图在单击按钮后立即禁用它以防止双击。以下 Javascript 完成了这项工作:

$(document).ready(function () {
    $("#<%=cmTest.ClientID %>").click(function () {
        $(this).attr("disabled", "disabled");
    });
});

这是我的按钮:

<asp:Button ID="cmTest" Text="Test" runat="server" />

这是我的 VB:

Private Sub cmTest_Click(sender As Object, e As System.EventArgs) Handles cmTest.Click

    Threading.Thread.Sleep(5000)

End Sub

只要将 jQuery .click 事件分配给按钮,客户端功能就会起作用,但服务器端事件永远不会运行。当我删除 jQuery 时,服务器端事件会执行。这几乎就像我已将 onclick=javascript:DisableButton();return false; 分配给按钮本身。有没有办法将该 Javascript 分配给按钮,同时还允许触发服务器端事件?

编辑:所以它不完全像将return false; 分配给按钮,因为页面仍然回发。执行 return false; 实际上取消了按钮的提交,这不是这里发生的事情。

【问题讨论】:

  • 我会假设服务器端事件没有触发,因为按钮被禁用。如果你想限制点击一次,为什么不做类似 onClick = if ( window.myClickPerformed ) { return false; } 其他 { window.myClickPerformed = true; }

标签: jquery asp.net events webforms


【解决方案1】:

将以下内容添加到您的表单元素中

onsubmit="$(':submit').attr('disabled', 'true');"

如果您有超过 1 个提交按钮,则必须使其更加明确。

【讨论】:

    【解决方案2】:

    帖子中不包含禁用的表单元素。

    因此,您的事件会在元素作为请求发送之前禁用该元素,从而将其隐藏在 ASP.Net 中。

    【讨论】:

      【解决方案3】:

      它不会执行,因为您禁用了按钮。而不是禁用,您可能应该更改按钮的外观和感觉(应用不同的 CSS),以便用户感觉它已被禁用。将会话变量设置为某个值作为按钮单击事件的第一行。并且每次检查它是否已经设置,然后不要执行代码。因此,您可以防止重复提交。

      【讨论】:

        【解决方案4】:

        您也可以将可见性设置为 false。和禁用按钮不太一样,但是有功能,不会遇到无法点击禁用按钮的问题。

        您甚至可以将其替换为加载图像。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-22
          • 1970-01-01
          • 1970-01-01
          • 2012-01-28
          • 1970-01-01
          相关资源
          最近更新 更多