jQuery取消绑定/禁用导航链接

时间:2011-01-19 09:27:19

标签: jquery

HY,

一个非常愚蠢的问题,但我无法让它发挥作用:

我有一些功能可以绑定我导航的点击。当链接是clicker时,它会使类“活动”。所以我的想法是我只是说:

<a id="link1" class="main">link1</a>
<a id="link2" class="main">link2</a>
<a id="link3" class="main">link3</a>

$('a.main').bind('click', function(){
$(this).removeClass('active');
//some code
$(this).addClass('active');
}

到目前为止工作正常。我的元素在命中时获取活动类,在单击其他类时移除。我的想法现在只是简单解开所有活动链接(否则一些双重加载发生在我的导航上的偏执10000次点击=)

§('a.active').unbind('click');

我还为导航中的每个元素指定了一个特殊事件:

$('a#link1').bind('click', function() {
$img.fadeOut('slow', function() {
      $('#bg div table tr td').addClass('loading');
        $img.attr('src', 'images/image.jpg');
     });
});

现在发生的事情是,如果我点击导航中的一个元素(手风琴),那么事物会向下滑动,获得活动类(仍保留主类):

<a id="link1" class="main active">link1</a>

当我点击导航中的另一个元素时,会关闭此元素并删除活动类。

但是当我之前回到那个链接时,它再也无法点击了吗?所以,我想jQuery从一个活跃的元素中取消了click事件的永久绑定。对我来说听起来有点愚蠢和不合逻辑......

也许有办法启用/解除这些。因此,一个检查元素是否具有活动类的函数应该被禁用。或者问题是“主动”类旁边的“主要”类......

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您可以命名事件处理程序,这样您就可以轻松解除它们的绑定,而不会影响附加到相同元素的相同类型的其他处理程序:

$('a.main').bind('click.activeState', function() {
    ...
});


$('a.active').unbind('click.activeState');


// and instead of binding several times, you can use attributeStartswith
$('a[id^=link]').bind('click.animation', function() {
    ...
});

查看.bind.unbind的“使用命名空间”小节。

答案 1 :(得分:0)

我认为你不明白jQuery事件绑定是如何工作的。你的问题不是很清楚,那里有一些错误的断言/假设。或者也许我只是不明白这个问题:)

无论如何,如果你只是想阻止重复点击,我会选择像

这样的东西
$('a:not(.active)').live('click', function(){
    $(this).siblings().removeClass('active');
    $(this).addClass('active');

    // ...do whatever here
});

演示here