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

时间:2011-07-25 05:42:40

标签: jquery asp.net postback onclientclick

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

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

<asp:LinkButton runat="server" OnClientClick="return confirmDelete()" ... />

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


为了完整性(回答pst的问题):呈现的HTML没问题。例如。它看起来像这样:

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

2 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:0)

这对我有用。

<asp:LinkButton runat="server" OnClientClick="return (!confirmDelete()){return false;}" />

<强>的Javascript

    function confirmDelete(){
    if(something == true){
    return true;
    }
    else{
    return false;
    }
    }