【问题标题】:Button onClick Event Handler Never Fires in Chrome Only仅在 Chrome 中不会触发按钮 onClick 事件处理程序
【发布时间】:2012-03-23 23:15:49
【问题描述】:

我正在开发一个旧的 ASP.NET WebForms 应用程序,它有一个带有以下控件的 .aspx 页面:

<asp:Button ID="Budget_Approve" OnClick="Budget_Approve_Click" runat="server"
Visible="True" Width="100" Height="30" Text="Approve"></asp:Button>

Budget_Approve_Click 事件处理程序从未被击中,我正在尝试确定原因。我注意到当页面加载时,执行此代码以将一些内联 js 添加到 onclick 属性:

Budget_Approve.Attributes.Add("onclick", "return confirm_approve();");

被渲染的 HTML:

<input type="submit" name="ctl00$mainContent$Budget_Approve" value="Approve"
onclick="return confirm_approve();WebForm_DoPostBackWithOptions(new
WebForm_PostBackOptions(&quot;ctl00$mainContent$Budget_Approve&quot;, 
&quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))"
id="ctl00_mainContent_Budget_Approve" style="height:30px;width:100px;">

所以当我点击时,我希望confirm_approve() 被执行。如果它返回true,我希望回发并让我的事件处理程序触发。在 Chrome 中调试,我发现confirm_approve() 确实返回了true

但是,回发永远不会发生,Budget_Approve_Click 事件处理程序永远不会被命中。为什么不呢?

编辑:我尝试删除完全添加内联 javascript 代码的行。但是,仍然没有回发。为按钮呈现以下 HTML:

<input type="submit" name="ctl00$mainContent$Budget_Approve" 
value="Approve"
onclick="javascript:WebForm_DoPostBackWithOptions(new
WebForm_PostBackOptions(&quot;ctl00$mainContent$Budget_Approve&quot;,
&quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))"
id="ctl00_mainContent_Budget_Approve" style="height:30px;width:100px;" />

更新:发现回发在 IE 中有效,但在 Chrome 中仍然无效。是否存在任何可能导致此问题的特定于浏览器的设置或问题?

【问题讨论】:

    标签: javascript asp.net google-chrome event-handling


    【解决方案1】:

    我会解决这个问题:

    Budget_Approve.Attributes.Add("onclick", "if (!confirm_approve()) return false;");
    

    【讨论】:

    • 感谢输入。试过了,但仍然没有。我什至尝试完全删除这条线,但结果没有变化。似乎有一个更大的问题..
    • @mhornfeck - 生成了什么 html?您可以将其编辑回您的答案
    • 将结果发布到原始问题
    • @mhornfeck - 所以你不再搞乱按钮,也没有回发?奇怪的。你检查过你的控制台是否有错误?
    • 控制台中没有错误。但是,我尝试在 IE(而不是 Chrome)中运行该页面,它确实回发。现在,要找到一个解释..
    【解决方案2】:

    试试这个...

    Budget_Approve.Attributes.Add("onclick", "if (!confirm_approve()) return false;");
    

    【讨论】:

    • 这与@Adam Racki 的回答完全相同。
    • 他们一定同时在打字
    • 我们领先了一分钟 - 他没有抄袭我
    • 是的,它可能是。我没有冒犯@Naeem Sarfraz,只是有点好奇!
    【解决方案3】:

    检查您的按钮是否以某种方式被禁用。

    $("input[type='submit']").attr("disabled", "disabled");

    如果发生这种情况,Chrome 将收到一个不完整的 POST 请求。 ASP.NET 不会触发服务器端事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多