2011-11-27 65 views
0

我在我的菜单中有一些效果,效果很好,但这些效果不应触发属于“活动”类的menupoint。我应该怎么做?使用eval或类似的东西?在mouseout上的jQuery什么都不做?

总结一下:如果触发器有一个特殊的类,我想拒绝一个效果。

回答

2

在每一个你的鼠标事件,在if()语句中使用.hasClass()

$('.selector').mouseout(function() { 
    if($(this).hasClass('active')) 
    { 
     return; 
    } 

    // The rest of your code. 
}); 

这里,if()检查该事件上触发的元素是否具有类active。如果是这样,则功能return,不在其中执行更多代码。

您还没有提供任何代码或HTML来处理,所以这是一个通用的解决方案。请更详细地更新您的问题,以便我可以给您更好的答案。

+1

你不应该使用“return false;”,只是为了“返回”。如果您不知道期望它们,则返回false值会产生很多副作用,这些副作用会混淆网站上的其他内容。阅读此更多信息:[滥用返回false](http://fuelyourcoding.com/jquery-events-stop-misusing-return-false) – loganfsmyth

+0

地狱是啊,对不起,这绝对是我有史以来最愚蠢的问题之一:) –

+0

@ LoganF.Smyth感谢您的高举。 TIL'return false'不好。我编辑了我的答案来反思。 – Bojangles

1

在触发功能,只是包装你的代码

if ($(this).not('.active')) { 
... 
} 
1

JamWaffles和CITO的工作方式,是最有效的,但正如你也可以做这样的选择,首先提取类值:

​​

那么你一定要来检查值

if (className != 'whatever') { 

    // animate and stuff etc 

} 

卜牛逼就像我说的,其他的方法更好,所以你不妨使用内置的jQuery的功能,如hasClass - 只是显示那里有不止一种方法来解决问题:)

1

结合(not) active这样的:
$('.menuitem:not(.active)').live('mouseout',function(){});

+0

如果“活动”类在页面的生命周期中没有改变,这是最好的解决方案。 – Cito

+0

编辑,谢谢 – UnLoCo

+0

好吧,即使“活动”类改变,使用'live()'也可以工作 - 但现在性能较差,特别是在使用鼠标移出事件时。顺便说一句,'live()'也被弃用。如果“主动”类没有改变(可能是这种情况),你以前的解决方案要好得多。 – Cito