【问题标题】:ASP.NET OnClick/OnClientClick - Broken if submit button disabledASP.NET OnClick/OnClientClick - 如果禁用提交按钮,则会损坏
【发布时间】:2016-11-01 04:06:03
【问题描述】:

我知道运行良好的 JS 验证函数(一直验证到 OnClientClick)。当被 OnClientClick 调用时,它们会检查是否所有必填字段都已填充,禁用提交按钮,并向 OnClientClick 返回正确的真/假验证。

问题在于禁用按钮。页面提交并重新加载,但未触发 OnClick 事件。备注

document.getElementById("<%=btnSubmit.ClientID %>").disabled = true;

代码允许 OnClick 事件触发。

我试过插入

this.disabled=true;

直接进入 OnClientClick,以及使用 UseSubmitBehavior=false。

为什么禁用按钮时 OnClick 事件不触发?

【问题讨论】:

  • 如果按钮被禁用,则OnClick函数不会被执行是正常的...
  • 您可以使用setTimeout 禁用该按钮,如这篇文章中所建议:stackoverflow.com/questions/37955604/…
  • @ConnorsFan 提供的解决方案(使用 setTimeout)似乎解决了我的问题。我不确定为什么在单击按钮后禁用该按钮会很重要。解释一下就好了?
  • 在按钮被点击时回发,并且仍然处于启用状态。数据发送到服务器后,可以禁用该按钮,而不会对服务器上正在进行的处理产生任何影响。

标签: javascript asp.net button onclick onclientclick


【解决方案1】:

两件事:

1 确保未设置“禁用”属性。尝试删除属性

document.getElementById("<%=btnSubmit.ClientID %>").removeAttribute('disabled');

2 OnClick post back 如果你打电话应该可以运行:

var button = document.getElementById("<%=btnSubmit.ClientID %>");
window.location.href = button.getAttribute("href");

基本上它强制浏览器发送请求,因为 OnClick 是服务器端方法。

【讨论】:

    【解决方案2】:

    您可以只使用包含 onClick 事件的 div 元素来包装按钮。即使按钮本身被禁用,它也应该触发。唯一的缺点是您不能直接从代码隐藏将事件分配给按钮。 从您的问题看来,无论按钮是否启用,onClick 事件都应该始终触发。

    【讨论】:

      【解决方案3】:

      我使用以下setTimeout() 代码解决了这个问题,我在ConnorsFan 发布的答案中找到了here

      function Control_Enable(controlId, enable) {
          setTimeout(function () {
              var ctrl = document.getElementById(controlId);
              ctrl.disabled = !enable;
          }, 10);
      }
      

      【讨论】:

        【解决方案4】:

        只为禁用的字段添加

        @Html.HiddenFor(model => model.Id)
        

        ViewModel 会按预期拾取它

        【讨论】:

          猜你喜欢
          • 2011-03-12
          • 1970-01-01
          • 2020-09-15
          • 2020-04-18
          • 1970-01-01
          • 1970-01-01
          • 2018-07-11
          • 1970-01-01
          • 2023-04-01
          相关资源
          最近更新 更多