代码之家  ›  专栏  ›  技术社区  ›  HandiworkNYC.com

禁用/取消绑定单击活动项,不活动时重新绑定单击

  •  2
  • HandiworkNYC.com  · 技术社区  · 16 年前

    我有一个左定位导航,可以在右侧显示/隐藏内容。当前,当您单击一个链接时,它会在右侧相应的内容中淡出,并向该链接添加一个活动类。我的问题是,如果再次单击活动链接,右侧的内容会再次淡入。我想在链接处于活动状态时解除该单击的绑定,如果您单击另一个导航链接(随后从上一个链接中删除类并将其添加到当前链接中),则将单击事件重新绑定到所有非活动链接。

    这是我当前的代码:

        $('.mixesSidebar ul li').click( function() {
               //Get the attribute id
               var liId = $(this).attr('id');
               //removeClass active from all li's, addClass active to this
             $('.mixesSidebar ul li').removeClass('active');
             $(this).addClass('active');
               //Hide all content on the right
             $('.mixesContent ul').hide();
               //Find the content with the same class as the clicked li's ID, and fadeIn
             $('.mixesContent').find('.' + liId).fadeIn('slow');
    });
    

    非常感谢你的帮助!

    3 回复  |  直到 16 年前
        1
  •  1
  •   hookedonwinter    16 年前

    如果你检查了 $( this ) 已经激活,如果没有,则继续执行代码。

    因此,在函数开始时,执行以下操作:

    if( ! $( this ).hasClass( 'active' ) )
    {
      // do stuff
    }
    
        2
  •  1
  •   Jake Wharton    16 年前

    用以下内容包围逻辑:

    if (!$(this).hasClass('active')) {
      ...
    }
    

    比解除绑定和重新绑定稳定得多。

        3
  •  0
  •   Chris Thompson    16 年前

    如果我正确理解这一点,我只需在淡入的div中添加一个“active”类或其他类,然后检查它是否已经有了该类,如果有,请不要淡入。

    编辑 因为我的描述很清楚:

    $('.mixesContent').find('.' + liId).addClass("active_list");
    
    if (! $('.mixesContent').find('.' + liId).hasClass("active_list"){
      //do the fade
    }