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

7
我有以下代码可以禁用所有超链接,但是在某个事件之后,我想要重新启用它们,该怎么做?
$("a").click(function() { return false; });

我认为这并不像简单地将其设置为true那样简单。 ;)
谢谢大家

所有答案都正确,但是我不得不把它给 Pointy,因为他指出了那个小提示——无意冒犯! - Abs
这会经常发生吗?据我理解,绑定/解绑需要一些开销。根据页面的情况,这可能不是最佳选择。 - user113716
http://www.bennadel.com/blog/1771-Enable-And-Disable-jQuery-Event-Handlers-Rather-Than-Bind-And-Unbind-.htm - user113716
11个回答

20

不要像那样绑定"click"处理程序,而是这样做:

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

然后,当您想要删除该处理程序时,很容易:

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

这样可以避免影响那些绑定了"click"事件的其他元素。如果你只是解除"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');

谢谢你的提示 - 我不想搞砸其他东西! - Abs
绑定一个返回 false 的函数会阻止其他绑定的处理程序在它之后执行吗?难道你不需要停止事件传播吗? - Mike Sherov
这有点像“货物崇拜”,但当我真的想杀死事件时,我会这样做:return !!event.stopPropagation() && false; - Pointy
这个方法可以使<a>标签的所有点击事件失效,而不仅仅是其超链接功能。我正在找到一种方法,可以在保留<a>标签的点击功能的同时禁用其链接功能。 - ming

6

试试这个:

// 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');

再见


我在IE9中使用live()遇到了问题,而且它也已经被弃用了 - 因此,如果您需要支持IE9或更低版本,请考虑使用其他解决方案。 - am_

5
绑定和解绑需要一些开销。
另一个解决方案是添加一个类,比如“disabled”,然后使用“hasClass('disabled')”来测试并查看是否应该返回“false”。
$('a').addClass('disabled');
$('a').click(function() {
    if($(this).hasClass('disabled'))
        return false;
});

4
这将替换页面上的所有链接为#,这意味着:禁用其他页面的链接。
$(document).ready(function() {
    $('a').attr('href', '#');
});

这个更好。它只是禁用了链接,而不是整个点击事件。 - ming

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

恢复:

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


0

你可以解除点击事件的绑定:

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

0
$(function(){


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

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

    $.myNoStopAnchor();

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

});

0

0

你应该能够解绑它。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接