2010-02-04 57 views
6

我有下面的禁用所有超链接,但事件后,我想再次启用它们,我该怎么做?使用JQuery禁用并启用所有超链接

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

我不认为它就像设置为true一样简单。 ;)

感谢所有

+0

所有正确的答案,但我不得不给它尖尖的指出这提示了 - 没有双关语意! – Abs 2010-02-04 19:12:21

+0

这会频繁发生吗?据我了解,绑定/解除绑定需要一些开销。根据页面,可能不是最好的方式。 – user113716 2010-02-04 19:17:27

+0

http://www.bennadel.com/blog/1771-Enable-And-Disable-jQuery-Event-Handlers-Rather-Than-Bind-And-Unbind-.htm – user113716 2010-02-04 19:20:05

回答

17

而是结合你的“点击”处理程序,方法,做到这一点

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

您避免这样搞砸可能会被“点击”的其他东西。如果您只是取消绑定“点击”,则会解除与该事件绑定的所有内容。

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

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

也许它会是更好地做到这一点:

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

解除绑定:

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

最后,你co ULD绑定一个处理程序文件体和处理<a>标签动态添加:

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

// to unbind 

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

谢谢你的提示 - 我没有想惹事! – Abs 2010-02-04 19:11:52

+0

是否绑定了一个返回false的函数,阻止其后的任何其他绑定处理程序执行?你是否也需要停止事件传播? – 2010-02-04 19:13:13

+0

这是一种“货物崇拜”,但当我真的想要杀死我所做的事件时:return !! event.stopPropagation()&& false; – Pointy 2010-02-04 20:06:04

0

你应该能够解除绑定。当你想删除处理它

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

然后很简单::

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

恢复:

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

,你可以解除绑定单击处理:

$('a').unbind('click') 
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'); 

bye

+0

我在使用IE9中的live()时遇到了问题,并且它也被弃用 - 所以如果您需要支持IE9或更低版本,请考虑使用不同的解决方案。 – 2014-06-23 12:28:23

4

绑定和解除绑定需要一些开销。

一个不同的解决方案是添加类似disabled的类,然后使用hasClass('disabled')来测试并确定它是否应该返回false

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


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

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

    $.myNoStopAnchor(); 

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

}); 
0

甚至更​​好,只需拨动大元素的display与高z-index。在下面的例子中,div覆盖了body。

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>

+0

为什么downvote没有解释?我已经在多种情况下使用这种方法,并取得成功。这个答案与问题一致。 – 2013-09-29 00:19:27

+0

请举例说明如何操作。 – 2016-05-04 11:04:31

+1

@DEVELOPER希望有所帮助。 – 2016-05-04 12:06:30

0

另一种方式,如果你严格想要的网址是不可访问,以及,你可以从a标签去除href属性。类似的东西:

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

additionaly更改文本和onHover选项光标颜色:

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