我知道围绕这个主题有很多答案,但我无法让它发挥作用。
我需要阻止发回链接按钮,以下代码无效。代码肯定会在所有必需的地方被击中。
链接按钮定义:
<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后它确实被击中。
任何人都可以对此有所了解吗?
答案 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
OnClientClick="return showConfirm(event);"
因此,当showConfirm返回false时,请求将不会转发到服务器而页面也不会回发。