2012-03-01 79 views
0

我有两个具有相同标记的自定义下拉列表。我一次只需要一次演出。现在,我可以同时打开两者。当我点击列表时,两者都应该关闭。如何通过jQuery隐藏具有相同标记的元素?

这两个列表都需要相同的标记,所以我不能使用唯一标识或其他类来实现此目的。

这里是一个链接到我的小提琴例如:http://jsfiddle.net/dg7Lc/29/

任何帮助将不胜感激,谢谢!

-D

回答

0

考虑在点击其中一个数据属性时通过jquery添加一个数据属性,如'active',然后隐藏所有具有该属性的属性。

0

$('.custom-select').eq(0).hide()将隐藏的第一个。

使用.show()而不是.hide()显示(很明显)并将索引更改为(1)以获得第二个。

+0

我相信OP意味着打开#2将关闭#1。 – pimvdb 2012-03-01 18:56:37

+0

是的 - 除非他们完全不熟悉JS,否则他们应该能够找出其余的。 – 2012-03-01 18:59:05

0

首先想到的是,如果你可以在一个或两个方向上包围span或div,并使用它来解决“相同标记”限制。除此之外,虽然,我会建议在页面上,使用顺序 - 使用的.next()和.prev()在它们之间获得,并且像

$("div.custom-select").get(0) 

$("div.custom-select").get(1) 

选择他们从外面。

编辑:如果你可以将它们从onmouseover,onchange或whatnot这样的东西上运行,它就更容易了 - 改变的将作为“this”参数传递给函数。只需隐藏两者并显示,或者同时显示并隐藏它。

edit2:同样,一旦你有一个隐藏正确 - 呃,那个将被隐藏,并回应“隐藏”选择器。使用它们之间进行区分(和保存的区别为jQuery的变量),你去显示或隐藏任何事情之前

0

隐藏第一:

$('.custom-select').first().hide(); 

隐藏第二:

$('.custom-select').last().hide(); 

然后在需要的地方放置这些代码行。

0

http://jsfiddle.net/dg7Lc/31/

基本上,关闭其他:

$('.custom-select').not(this).find('ul').slideUp('fast'); 

以及用于封闭外箱点击时,我用这段代码,但它是一个有点脏:

$("body").click(function(e) { 
    var should = true; 
    for($e = $(e.target); should && $e.length; $e = $e.parent()) { 
     should = !$e.is(".custom-select"); 
    } 
    if(should) { 
     $('.custom-select').find('ul').slideUp('fast'); 
    } 
}); 
0

您可以将点击与文档绑定,看看是否点击了自定义选择或其外部的文档,并隐藏所有打开的列表,如下图所示:

$(document).click(function(ev){ 
    if(!$(ev.target).is('.custom-select span')){ $('.custom-select').find('ul').slideUp('fast'); } 
}); 

Updated JSFiddle

相关问题