用jQuery切换类

问题描述:

当我点击一个缩略图(.framesButton)时,它滑动打开一个很好的面板。我只是希望它也添加一个类(.frameSelected),它将带有小黑色三角形的背景添加到img的父母<li>这种类型的作品现在适用于单击和关闭缩略图,因为我只是切换。但是,如果我在滑动面板仍然打开的同时点击另一个缩略图,我会看到一个三角形但带有一个封闭的面板。你可以在这里看到:用jQuery切换类

http://oaeyewear.4pixels.co.uk/brands.html

到目前为止我的代码是:

$('.framesButton').click(function() { 
     $(this).parent().toggleClass('frameSelected'); 
     $(this).parent().siblings().removeClass('frameSelected'); 
}); 

不幸的是我的jQuery的仍然是基本由我来翻译一下我想转换成代码。

你总是切换容器的能见度

$(".framesButton").click(function(){ 
    $(".lensesDetail").slideToggle('slow'); 
}); 

不管相同的缩略图是否被按下。

解决方法是测试点击的元素是否是先前点击的元素,您可以通过测试其父元素是否具有类frameSelected来完成。如果是,隐藏容器,如果没有,请将其打开或打开。

合并两组单击事件处理程序:

$('.framesButton').click(function() { 
    var $parent = $(this).parent(); 

    if ($parent.hasClass('frameSelected')) { 
     // toggle visibility of container 
     $('.lensesDetail').slideToggle('slow'); 
    } 
    else { 
     // show the container - won't do anything if already open 
     $('.lensesDetail').slideDown('slow'); 
    } 

    $parent.toggleClass('frameSelected') 
     .siblings('.frameSelected').removeClass('frameSelected'); 
}); 

的解决方案取决于你究竟是如何填充与信息.lensesDetail元素,即你是否有一个对每个缩略图或每行一个或一个用于整个列表。
一旦你想出来,你将不得不调整上述的解决方案。

+0

由于菲利克斯,完美的作品,现在我明白hasClass以及如何使用它的:)“.lensesDetail”面板将根据改变一下每个拇指如果面板已经打开。我还没有决定如何动画,以便用户知道它已更改。一张幻灯片将是可爱的,但也许超出我的能力,所以也许我会淡出并淡入。 – 2013-02-22 12:12:08

在短期和简单的只是这样做:

$(".framesButton").click(function(){ 
    $(".lensesDetail").slideUp('slow',function(){ 
     $(".lensesDetail").slideDown('slow'); 
    }); 
    $(this).parent().toggleClass('frameSelected'); 
    $(this).parent().siblings().removeClass('frameSelected'); 
}); 
+0

谢谢你。试过,但没有运气。无论如何,我认为第二行是slideDown。但是我会从中学到一切,我会尽快做出反应。 – 2013-02-22 12:14:04

+0

@Andy刚刚更新了答案,你可以试试这个。 – Jai 2013-02-22 12:16:37