2010-02-04 41 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'); 
);