2009-11-25 53 views
3

我有一個頁面內部的一些鏈接和一些外部div。禁用點擊事件的除了鏈接內的所有鏈接

<div id="navigation"> 
    <ul> 
     <li> 
     <a href="/Home/Index">Home</a></li> 
     <li> 
     <a href="/Home/contactus">Contact Us</a></li> 
    </ul> 
    </div> 
<a href="/User/SignIn">Sign In</a>...... 

我需要爲除navigation div以外的所有鏈接禁用點擊事件。

如何使用類似於做jQuery中:

//disable Click event for links 
    $("a:not([id])").live('click', function(e) { 
     e.preventDefault; 
     return false; 
    }); 

回答

4

一試之後,下面的執行工作:

//disable Click event for links except navigation 
    $("a:not(#navigation a)").live('click', function(e) { 
     e.preventDefault; 
     return false; 
    }); 

在此

+0

最初我的印象是_:not()_只接受簡單的選擇器,但進一步的檢查表明你的實現是有效的並且足夠 – 2009-11-26 03:50:55

2

這不,在一般情況下,聽起來是個好主意,但在這裏就是我會做它:

$('a[href]').live ('click', function (e) 
{ 
    if (!$(this).parents('#navigation').length)) 
     return false; // same as e.preventDefault() & e.stopPropogation() 
}); 
+0

哦,親愛的任何瑕疵..在研讀了jQuery的直播活動(http://docs.jquery.com/Events/live)頁面,我意識到* e.stopPropogation() *不會按預期工作(感謝通過委派實現) - 所以*返回false *與* e.preventDefault()完全相同* – 2009-11-25 07:49:44

+0

不完全。返回false是e.preventDefault()和e.stopPropagation的組合。 – 2013-02-19 22:28:06

0

用K總理的回答啓發:

$('a') 
.filter(function(){return $(this).parents('#navigation').length == 0}) 
.live('click', function(e) { 
    return false; 
}); 
+0

根據jQuery文檔(http://docs.jquery.com/Events/live),他們只使用選擇器本身進行實時綁定,因此初始過濾器將不起作用。 – 2009-11-25 07:48:43