以下是一些示例测试html:
<!DOCTYPE html>
<html>
<body>
<a href="javascript:alert('Not going anywhere!');">Go nowhere 1</a>
<a href="javascript:void(0);" onclick="alert('Not going anywhere!');">Go nowhere 2</a>
<a href="http://www.google.com">Go somewhere</a>
<script type="text/javascript">
window.onbeforeunload = function() { return "Really leave?"; };
</script>
</body>
</html>
这是一个工作页面:timjeanes.com/ie9_onbeforeunload.htm
在Firefox,Chrome和Safari中,我得到了我想要的行为。也就是说,单击前两个链接中的任何一个都会显示一个警告对话框;单击第三个链接(或以其他方式导航)显示“您确定要离开此页面吗?”消息。
然而,在IE9中,“你确定要离开这个页面吗?”当您单击前两个链接中的任何一个时,即使没有正在进行导航,也会显示消息 - 我们只是运行一些javascript。
我有什么问题吗?或者IE有一个很好的解决方法吗?
一个选项是使用href =“#”并将我的javascript放入onclick。我并不热衷于此,因为它将用户带到页面顶部,而我的真实页面非常高。
我没有在其他版本的IE中测试过。
答案 0 :(得分:17)
这是一个非常不幸的错误。看来你必须解决它,使用哈希链接方法可能是最好的方法。为避免将用户带到页面顶部,请使用event.preventDefault()
和event.returnValue = false
取消活动。
function myClickHandler(e) {
if (e.preventDefault)
e.preventDefault();
e.returnValue = false;
alert("Not going anywhere!");
}
这样称呼:
<a href="#" onclick="myClickHandler(event)">Go nowhere 1</a>
修改:您可以取消网页上所有哈希链接的事件,如下所示:
var links = document.links;
for (var i = 0; i < links.length; i++) {
var link = links[i];
if (link.href == "#") {
if (link.addEventListener) {
link.addEventListener("click", cancelEvent, false);
}
else if (link.attachEvent) {
link.attachEvent("onclick", cancelEvent);
}
}
}
function cancelEvent(e) {
e = e || window.event;
if (e.preventDefault)
e.preventDefault();
e.returnValue = false;
}
或者jQuery只使用一行代码:
$("a[href='#']").click(function (e) { e.preventDefault(); });
答案 1 :(得分:5)
更简单的解决方案是在IE中使用onunload,在其他浏览器中使用onbeforeunload。
答案 2 :(得分:4)
#null
中的 href
,以阻止页面跳转,而不仅仅是#
和onclick=""
中的脚本
答案 3 :(得分:2)
您不应使用href="javascript:...
绑定点击事件:以下情况不佳。
<a href="javascript:alert('Not going anywhere!');">Go nowhere 1</a>
如果您要使用onclick并使href无效,则只需在onclick中返回false。
<a onclick="alert('Not going anywhere!');return false;">Go nowhere 2</a>
答案 4 :(得分:1)
这实际上不是“您确定要离开此页面吗?”的错误。单击第一个链接时弹出消息;它似乎是IE 9中的“功能” - More reasons I dislike IE