0

我正在做一个项目,我需要暂时禁用所有超链接,然后在我的弹出 div 消失后再次启用它们。我可以使用我写的这个函数成功禁用所有链接:

    function disableHyperlinks(){
        link_targets = Array();
        var anchors = document.getElementsByTagName("a");
        for(var i = 0; i < anchors.length; i++){
            link_targets.push(anchors[i].href);
            anchors[i].href= "#";
        }
     }

它还保存了所有 URL,以便以后可以使用函数将它们放回去:

    function enableHyperlinks(){
        var anchors = document.getElementsByTagName("a");
        for(var i = 0; i < anchors.length; i++){
            anchors[i].href= link_targets[i];
        }
    }

上面的代码似乎工作得很好,它删除了所有链接,然后将它们全部放回没有任何问题,但问题是如果我在单击链接后运行“启用”代码,它几乎就像 javascript正在将链接设置回原始目的地,然后注册点击。因此,尽管以这种方式被“禁用”,链接仍然最终离开页面。

问题在这里演示

单击带有白色背景的红色“L”以启用我为选择所做的 javascript,您会注意到将鼠标移到的任何内容都会出现蓝色虚线边框,我需要能够“选择”网页的某些部分如果还单击了链接,则无需重定向到另一个页面..知道如何正确执行此操作吗?

(请注意我试图避免使用 JQuery)

4

3 回答 3

2

在 onClick 监听器上工作:

var areEnabled = false;
function toggleLinks(){
    var anchors = document.getElementsByTagName('a');
    for(var i=0; i < anchors.length; i++)
        anchors[i].onclick = (areEnabled) ? null : function(e){ return false };
    areEnabled = !areEnabled;
};
于 2012-07-10T14:40:51.827 回答
0

而不是搜索许多链接并禁用它们(顺便说一句,这不会帮助您对抗其他可点击对象),您可以创建另一个 invisible div,就在您的弹出窗口下方z-index,它将覆盖整个页面并捕获所有点击而不是下面的元素。您甚至可以将其设为半透明而不是完全不可见,以达到提醒用户“低级”已禁用的视觉效果。

于 2012-07-10T15:00:33.917 回答
0

我终于能够通过操作每个超链接的 onclick 属性来解决我自己的问题,然后将其设置回原来的状态。bokonic 响应的唯一问题是 onclick 属性设置为 null 以“重新启用”该链接,这将禁用该链接之前具有的任何 javascript 功能。

var onclickEvents;

function disableHyperlinks(){
    onclickEvents = Array();
    var anchors = document.getElementsByTagName("a");
    for(var i = 0; i < anchors.length; i++){
        onclickEvents.push(anchors[i].onclick);
        anchors[i].onclick=function(){return false;};
    }
}

function enableHyperlinks(){
    var anchors = document.getElementsByTagName("a");
    for(var i = 0; i < anchors.length; i++){
        anchors[i].onclick = onclickEvents[i];
    }
}
于 2012-09-30T13:16:15.410 回答