如果通过单击锚点重定向,则停止重定向页面

时间:2013-07-19 15:18:39

标签: javascript jquery

我想阻止页面重定向我知道它可以通过这个来实现

window.onbeforeunload = function() {
        return "Dude, are you sure you want to leave? Think of the kittens!";
}

这里已经回答Prevent any form of page refresh using jQuery/Javascript

但在我的情况下,我只想通过点击任何锚标记来重定向页面时阻止页面。

同样event.preventDefault()在单击锚标记时不起作用,因为所有锚点都没有重定向页面,所以它应该可以正常工作。

我只想通过单击锚点重定向来停止重定向页面。任何解决方案?

4 个答案:

答案 0 :(得分:4)

您可以保留一个标记,告诉您用户是否点击了a标记,然后在onbeforeunload脚本中读取该标记:

window.onbeforeunload = function () {
    if (_clickedAnchor) {
        _clickedAnchor = false;
        return "Dude, are you sure you want to leave? Think of the kittens!";
    }
}

_clickedAnchor = false;

jQuery(document).ready(function () {
    jQuery("a").click(function () {
        _clickedAnchor = true;
    });
});

答案 1 :(得分:0)

您可以使用onhashchange

使用jQuery:

$(window).on('hashchange', function() {
    alert('bye byee?');
});

Plain DOM JavaScript:

window.onhashchange = function() {
    alert('bye byee?');
};

注意:您需要为不支持此事件的旧浏览器创建自定义“哈希更改”处理程序。

您可以使用setInterval轻松执行此操作,并检测document.location.hash中的所有更改。


旧浏览器的失败安全onhashchange

var currentHash = document.location.hash;

window.prototype.onhashchange = function( callback ) {
    if(typeof(callback) == 'function') {
        setInterval(function() {
            if(document.location.hash !== currentHash) {
                callback();
            }
        }, 650); // more than a half-a-second delay
    }
}

您可以将它用作常规DOM约定中的事件。

答案 2 :(得分:0)

因此,既然你标记了jQuery,那么我就会根据它来解决问题。您可以获取所有标签,然后检查以确保锚是重定向,然后使用e.preventDefault();

$('a').on('click',function(e){
    if ($(this).attr('href') != window.location.href)
    {
       e.preventDefault();
       //do stuff
    }
});

答案 3 :(得分:0)

如果点击链接,则调用者将为null:

window.onbeforeunload = function() {
    alert(window.onbeforeunload.caller)    
}