2009-11-25 34 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