使用JQuery禁用和启用所有超链接

时间:2010-02-04 19:04:40

标签: javascript jquery

我有以下禁用所有超链接但在事件发生后我想再次启用它们,我该怎么做?

$("a").click(function() { return false; });

我不认为它只是简单地设置为真。 ;)

全部谢谢

11 个答案:

答案 0 :(得分:18)

不要以这种方式绑定“click”处理程序,而是执行此操作:

$('a').bind("click.myDisable", function() { return false; });

然后当你想删除那个处理程序时,很容易:

$('a').unbind("click.myDisable");

这样你就可以避免弄乱可能被“点击”的其他东西了。如果您只是取消绑定“click”,则取消绑定与该事件绑定的所有内容。

2014年编辑 - 现在绑定事件的方式是.on()

$('a').on('click.myDisable', function() { return false; });

这样做可能会更好:

$('a').on('click.myDisable', function(e) { e.preventDefault(); });

取消绑定:

$('a').off('click.myDisable');

最后,您可以将处理程序绑定到文档正文并处理动态添加的<a>标记:

$('body').on('click.myDisable', 'a', function(e) { e.preventDefault(); });

// to unbind

$('body').off('click.myDisable');

答案 1 :(得分:5)

试试这个:

// Better to use the live event handler here, performancewise
$('a').live('click', function() {... return false;});

// Now simply kill the binding like this
$('a').die('click');

再见

答案 2 :(得分:4)

绑定和取消绑定需要一些开销。

另一种解决方案是添加类似disabled的类,然后使用hasClass('disabled')进行测试,看看它是否应该返回false

$('a').addClass('disabled');
$('a').click(function() {
    if($(this).hasClass('disabled'))
        return false;
});

答案 3 :(得分:2)

这会将页面上的所有链接替换为 #,这意味着:禁用其他页面的链接

$(document).ready(function() {
    $('a').attr('href', '#');
});

答案 4 :(得分:0)

您要取消绑定活动:http://api.jquery.com/unbind/

答案 5 :(得分:0)

你应该能够解开它。

$("a").unbind("click");

答案 6 :(得分:0)

var disableLink = function(){ return false;};
$('a').bind('click', disableLink);

要恢复:

$('a').unbind('click', dsiableLink);

答案 7 :(得分:0)

你可以取消绑定点击处理程序:

$('a').unbind('click')

答案 8 :(得分:0)

$(function(){


    $.myStopAnchor = function(){
      $stop = true;
    }

    $.myNoStopAnchor = function(){
      $stop = false;
    }

    $.myNoStopAnchor();

    $("a").click(function(ev) { 
       if ($stop){
         ev.stopPropagation()
       }
       return !$stop; 
    });

});

答案 9 :(得分:0)

甚至更好,只需使用高display切换大元素的z-index即可。在下面的例子中,div覆盖了身体。

var link = document.getElementsByTagName('a')[2];
var noclick = document.getElementById('noclick');

link.onclick = function() {
  noclick.className = 'on';
}
#noclick {
  display: none;
  position: absolute;
  left: 0px;
  right: 0px;
  top: 0px;
  bottom: 0px;
  /* Make sure this floats over content */
  z-index: 100; 
}

#noclick.on {
  display: block;
}
<body>
  <div id="noclick"></div>
  <a href="#">one</a>
  <a href="#">two</a>
  <a href="#">three</a>
</body>

答案 10 :(得分:0)

另一种方法是,如果您严格也希望网址不可访问,则可以从href代码中删除a属性。这样的事情:

 $('a').removeAttr('href');

另外改变文本颜色和onhover光标:

 $('a').css('color', '#333');
 $('a').hover(function () {
       $(this).css('cursor', 'not-allowed');
 );