防止LinkBut​​ton回发OnClientClick无法正常工作。为什么?

时间:2013-05-23 09:44:25

标签: javascript asp.net

我知道围绕这个主题有很多答案,但我无法让它发挥作用。

我需要阻止发回链接按钮,以下代码无效。代码肯定会在所有必需的地方被击中。

链接按钮定义:

  <asp:LinkButton ID="NavHelp" OnClientClick="showConfirm(event);" OnClick="NavHelp_Click" ToolTip="Help" runat="server"></asp:LinkButton>

Javascript功能(绝对被击中)

function showConfirm(event) {
  event.stopPropagation();
  return false;
}

但是,在showConfirm返回false后,链接按钮仍然会回发到服务器端NavHelp方法。

作为旁注,我还在.NET生成的__doPostback方法中放置了一个断点,并且在showConfirm返回false后它确实被击中。

任何人都可以对此有所了解吗?

4 个答案:

答案 0 :(得分:6)

是的,想通了。我需要在OnClientClick属性中包含return语句:

OnClientClick="return showConfirm(event);"

不是

OnClientClick="showConfirm(event);"

答案 1 :(得分:1)

顺便说一句,您可以使用原始代码,但不是使用event.stopPropagation(),而是可以使用event.preventDefault()

所以你的代码将是

<asp:LinkButton ID="NavHelp" OnClientClick="showConfirm(event);" OnClick="NavHelp_Click" ToolTip="Help" runat="server"></asp:LinkButton>

function showConfirm(event) {
  event.preventDefault();
  return false;
}

在event.preventDefault()vs event.stopPropagation()上阅读更多内容  在这里:http://davidwalsh.name/javascript-events

基本上,preventDefault会阻止元素执行其dfault操作,即访问链接或提交表单,而stoppropagation允许dfault操作发生,但不会通知任何父元素它已发生。

我创建了一个小jsfiddle:http://jsfiddle.net/XgSXr/,它显示了防止默认值,这应该允许你在成功推送链接点击之前输入你自己的javascript逻辑,显示模态等。

答案 2 :(得分:1)

这有效:

<asp:LinkButton ID="NavHelp" ClientIDMode="Static" OnClientClick="showConfirm(event);" OnClick="NavHelp_Click" ToolTip="Help" runat="server"></asp:LinkButton>
<script>
    $("#NavHelp").click(function(event) {
        if (showConfirm()) {
            event.stopPropagation();
            event.preventDefault();
            return false;
        }
        return true;
    });
</script>

答案 3 :(得分:0)

onClientClick Javascript Event

中添加Return语句
OnClientClick="return showConfirm(event);"

因此,当showConfirm返回false时,请求将不会转发到服务器而页面也不会回发。