如果使用 onclick,则不会调用 OnServerClick 事件处理程序

新手上路,请多包涵

我这里有一个特殊的问题,我一生都无法弄清楚解决方案是什么。请注意,以下代码 不是 动态创建的,而是立即在我的 aspx 文件中创建的。

 <button type="button" runat="server" id="btnSubmit"
  OnServerClick="btnSubmit_Click" onclick="return confirm('Sure?');">
    Submit
</button>

只要我 没有 onclick 属性,它就可以正常工作,即 OnServerClick 处理程序被触发。但是当我使用 onclick 属性时却不是,无论我确认还是拒绝确认对话框。

我究竟做错了什么?

原文由 Deniz Dogan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 344
2 个回答

如果查看生成的源代码,您将看到以下内容:

 onclick="return confirm('Sure?'); __doPostBack('btnSubmit','')"

所以发生的事情是 _doPostBack 永远不会被调用。做你正在寻找的事情的骇人听闻的方法如下:

 <button type="button" runat="server" id="btnSubmit"
  OnServerClick="btnSubmit_Click" onclick="if (confirm('Sure?')) ">

真正正确的方法是使用 Web 控件:

 <asp:Button runat="server"
        OnClick="btnSubmit_Click" OnClientClick="return confirm('Sure?')" Text="Submit" />

原文由 Yuriy Faktorovich 发布,翻译遵循 CC BY-SA 2.5 许可协议

公认的答案并不完美。如果你不使用 type="button" ,即使你点击取消,网页也会回发。正确和最简单的方法是利用 短路评估 并执行此 hack:将 ; 替换为 && ! ,如下所示。

 <button runat="server" id="btnSubmit"
        OnServerClick="btnSubmit_Click" onclick="return confirm('Sure?') && !">

输出将如下所示:

 <button id="btnSubmit"
        onclick="return confirm('Sure?') && ! __doPostBack('btnSubmit','')">

It gives correct return value because true && !undefined will return true and undefined will be evaluated and false && !undefined will return falseundefined 将不会被评估,这正是我们想要的。

原文由 Mygod 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题