为什么不从OnClientClick返回false取消回发

M4N*_*M4N 7 asp.net jquery postback onclientclick

我有一个LinkButton地方,我使用该OnClientClick属性询问用户他是否真的想要执行一个动作,例如:

<script>
function confirmDelete() {
  return confirm('Do you really want to delete?');
}
</script>

<asp:LinkButton runat="server" OnClientClick="return confirmDelete()" ... />
Run Code Online (Sandbox Code Playgroud)

这种模式通常有效,但在这个特定页面上却没有.无论是否在确认对话框中单击"确定"或"取消",都会执行回发.


只是为了完整性(回答pst的问题):呈现的HTML是可以的.例如它看起来像这样:

<a id="ctl00_c1_content_btnDelete" onclick="return confirmDelete();"
 href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(..))"
... >
  Delete
</a>
Run Code Online (Sandbox Code Playgroud)

M4N*_*M4N 7

行为的原因是另一条javascript,其中链接(按钮)的click事件的处理程序是通过jquery注册的,例如类似于:

<script>
$(document).ready(function() {
  $('a').click(function() {
    // ...
    return (someCondition == true);
  });
});
</script>
Run Code Online (Sandbox Code Playgroud)

似乎这个click-handler在注册者之后被调用OnClientClick,当这个返回时true,然后发生回发,与第一个click-handler(确认对话框)的结果无关.