2012-07-31 73 views
1

我使用toggleClass().看选择哪个菜单选项的选择菜单:如何查看哪个元素先被点击?

$('.img1, .img2, .text1, .tex2').click(function() { 
    $(this).toggleClass('selected'); 
}); 

我的选择菜单中的工作方式是,如果两个元素具有类selected然后会有些事情发生。例如:

if ($('.img1').hasClass('selected') && ('.text1').hasClass('selected')) { 
    // do something 
} 

这一切能够完美,但是我想从吸取两个imgs或两个texts禁用用户。我想要这样做的方式只是将第一个选定的元素从选定的类中移除,并将第二个选定的元素保持选中状态。例如:

if ($('.img1').hasClass('selected') && ('.img2').hasClass('selected')) { 
     // remove selected from the element that was first clicked and keep selected on the element that was clicked second 
} 

实现此目的的最佳方法是什么?提前致谢。

+0

为什么要投票? – iambriansreed 2012-07-31 18:30:55

+0

我upvoted你的答案... – Jon 2012-07-31 18:33:09

+0

我问你的问题上的DV。 – iambriansreed 2012-07-31 18:33:53

回答

1

尝试:

$('.img1, .img2').click(function() { 
    $('.img1, .img2').removeClass('selected').filter(this).toggleClass('selected'); 
}); 
$('.text1, .text2').click(function() { 
    $('.text1, .text2').removeClass('selected').filter(this).toggleClass('selected'); 
}); 

分离你的点击事件将确保只有每个类型的物品的一个选择。

此外,请确保您没有在做$('this')

它应该是$(this)

+1

工程很好,做得非常好。谢谢。 – Jon 2012-07-31 18:28:25

+0

@Ferri你用最新的代码,'.filter(this)'来试试吗? – iambriansreed 2012-07-31 18:29:11

+1

是的,它的工作原理。 – Jon 2012-07-31 18:30:19

0

这会将类名称“first”添加到被点击的第一个项目。其余的由你决定。

$('.img1, .img2, .text1, .tex2').click(function() { 
    $('this').toggleClass('selected'); 
    if($('.first').length==0) { 
     $('this').addClass('first'); 
    } 
}) 
0

也许,如果你有这样的持续跟踪所点击物品的ID的数组,你可以使用:

var clickArr = new Array(); 
$('.img1, .img2, .text1, .tex2').click(function() 
{ 
    $('this').toggleClass('selected'); 
    clickArr.push($(this).attr("id")); 
}); 

然后,当你发现其中两个被选中的点:

if ($('.img1').hasClass('selected') && ('.img2').hasClass('selected')) 
{ 
    $("#"+clickArr[0]).removeClass("selected"); 
    clickArr.shift(); 
} 

这可能会很棘手,因为每次“处理选择”时都需要清空数组。但也许这可以让你开始。