Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中启用和禁用超链接_Javascript_Html_Hyperlink_Href - Fatal编程技术网

在JavaScript中启用和禁用超链接

在JavaScript中启用和禁用超链接,javascript,html,hyperlink,href,Javascript,Html,Hyperlink,Href,我正在进行一个项目,需要暂时禁用所有超链接,然后在弹出div消失后再次启用它们。我能够使用我编写的此函数成功禁用所有链接: function disableHyperlinks(){ link_targets = Array(); var anchors = document.getElementsByTagName("a"); for(var i = 0; i < anchors.length; i++){

我正在进行一个项目,需要暂时禁用所有超链接,然后在弹出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= "#";
        }
     }
函数禁用超链接(){
link_targets=Array();
var archors=document.getElementsByTagName(“a”);
对于(var i=0;i
它还保存所有URL,以便稍后使用此功能将其放回:

    function enableHyperlinks(){
        var anchors = document.getElementsByTagName("a");
        for(var i = 0; i < anchors.length; i++){
            anchors[i].href= link_targets[i];
        }
    }
功能启用超链接(){
var archors=document.getElementsByTagName(“a”);
对于(var i=0;i
上面的代码似乎工作得很好,它删除了所有链接,然后将它们全部放回原处,没有任何问题,但是问题是,如果在单击链接后运行“启用”代码,就好像javascript将链接设置回原始目标,然后注册单击。因此,尽管以这种方式被“禁用”,链接仍然会离开页面

这个问题被证明了

单击白色背景的红色“L”以启用我为选择所做的javascript,您会注意到您将鼠标移到上面的任何内容都将得到蓝色虚线边框,如果同时单击链接,我需要能够“选择”网页的部分,而无需重定向到另一页。。你知道我该怎么做吗


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

使用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;
};
var arenabled=false;
函数toggleLinks(){
var archors=document.getElementsByTagName('a');
对于(var i=0;i
您可以在
z-index
弹出窗口下方创建另一个不可见的
div
,它将覆盖整个页面并捕获所有点击,而不是下方的元素,而不是搜索许多链接并禁用它们(顺便说一句,这对其他可点击对象没有帮助)。您甚至可以将其设置为半透明,而不是完全不可见,以获得视觉效果,提醒用户“较低级别”已禁用。

我终于能够通过操纵每个超链接的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];
    }
}
var-onclickEvents;
函数禁用超链接(){
onclickEvents=Array();
var archors=document.getElementsByTagName(“a”);
对于(var i=0;i
我不知道标签有这个属性,谢谢!但是,使用这种方法并没有解决问题。应该是onclick,而不是onclick仍然不起作用,我认为问题可能不是我禁用链接的确切方式。当我将鼠标悬停在“disabled”链接上时,它确实显示它指向“#”,但当我单击它时,它指向它原来指向的位置,而不是“#”。o_o链接到JS:请看我链接到的演示站点,我需要能够在页面上选择项目,然后单击它们,而不必单击链接。我并不担心弹出div后面的可点击项目。@PatrickTNelson,的确如此。那么,同样的解决方案如何,覆盖div中的所有内容,给它分配一个处理程序来确定鼠标下的元素,或者让click掉下来,或者取消它?听起来不错,但对于web开发,我是一个新手,我不知道如何实现它。有一个链接到某种形式的教程可能会有所帮助吗?好吧,我屈服了,我现在正在使用JQuery。能够使用preventDefault()在Chrome中解决此问题;但这并不能解决Firefox中的问题。