我创建了一个可用的下拉菜单,但我希望它用于选择过滤器。所以问题是当你选择一个过滤器选项时,下拉消失了。我只希望菜单显示并在选择单词过滤器时消失。我想我只需要更多的javascript来做这个我只是不知道如何。感谢您的帮助。
这是我的HTML:
<div id="vv" class="fill_box">
Filters
<div class="dropdown1">
<div class="padding">
<div class="type">
<div class="typeTitle">
Type:
</div>
<div class="typeButton">
<div class="typeOne">
All
</div>
<div class="typeOne">
Local
</div>
<div class="typeOne">
Chain
</div>
</div>
</div>
<div class="type">
<div class="typeTitle">
Price:
</div>
<div class="typeButton">
<div class="priceOne">
$
</div>
<div class="priceOne">
$$
</div>
<div class="priceOne">
$$$
</div>
<div class="priceOne">
$$$$
</div>
</div>
</div>
<div class="type">
<div class="nowButton">
Open Now
</div>
</div>
<div class="type">
<div class="typeTitle">
Category 1:
</div>
<div class="categoryButton">
<input type="text">
</div>
</div>
</div>
</div>
</div>
CSS:
.fill_box {
position: relative;
margin: 0 auto;
background: #fff;s
border-radius: 5px;
box-shadow: 0 1px 0 rgba(0,0,0,0.2);
cursor: pointer;
outline: none;
-webkit-transition: all 0.3s ease-out;
-moz-transition: all 0.3s ease-out;
-ms-transition: all 0.3s ease-out;
-o-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
text-align: center;
background: #CC0000;
border: 2px solid white;
border-radius: 4px;
padding: 5px 0;
margin-top: 10px;
font-size: 14px;
width: 100px;
color: white;
}
.fill_box .dropdown1 {
overflow: hidden;
margin: 0 auto;
padding: 0px;
background: white;
border-radius: 0 0 0px 0px;
border: 1px solid rgba(0,0,0,0.2);
border-top: none;
border-bottom: none;
list-style: none;
-webkit-transition: all 0.3s ease-out;
-moz-transition: all 0.3s ease-out;
-ms-transition: all 0.3s ease-out;
-o-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
text-align: left;
max-height: 0;
background: #3d3d3d;
width: 300px;
color: white;
}
JavaScript的:
function DropDown1(me) {
this.dd = me;
this.initEvents();
}
DropDown1.prototype = {
initEvents : function() {
var obj = this;
obj.dd.on('click', function(event){
$(this).toggleClass('active');
});
}
}
$(function() {
var dd = new DropDown1( $('#vv') );
$(document).click(function() {
// all DropDown1s
$('.fill_box').show('active');
});
});
答案 0 :(得分:2)
您希望停止点击事件传播出下拉菜单。
我更新了你的小提琴。 http://jsfiddle.net/k73s8/6/
$(".dropdown1").click(function(e) {
e.stopPropagation();
});
http://api.jquery.com/event.stopPropagation/
这就是HTML的样子。
<div id="vv" class="fill_box active">
Filters
<div class="dropdown1">
<div class="padding">
<div class="type">
<div class="typeTitle">
Type:
</div>
<div class="typeButton">
<div class="typeOne">
All
</div>
<div class="typeOne">
Local
</div>
<div class="typeOne">
Chain
</div>
</div>
</div>
<div class="type">
<div class="typeTitle">
Price:
</div>
<div class="typeButton">
<div class="priceOne">
$
</div>
<div class="priceOne">
$$
</div>
<div class="priceOne">
$$$
</div>
<div class="priceOne">
$$$$
</div>
</div>
</div>
<div class="type">
<div class="nowButton">
Open Now
</div>
</div>
<div class="type">
<div class="typeTitle">
Category 1:
</div>
<div class="categoryButton">
<input type="text">
</div>
</div>
</div>
</div>
</div>
id为“vv”的root div元素有一个单击侦听器,可以在视图内外切换内容。您希望能够单击此div中的项目,因此您需要确保单击事件不会冒泡到vv单击侦听器。要做到这一点,只需调用stopPropagation。
答案 1 :(得分:2)
您可能希望将“过滤器”文本放在元素上,然后在其上切换。
<a id="toggle">Filters</a>
然后您的脚本将是:
function DropDown1(me) {
this.dd = me;
this.initEvents();
}
DropDown1.prototype = {
initEvents : function() {
var obj = this;
obj.dd.on('click','#toggle', function(event){
$(this).parent().toggleClass('active');
});
}
}
$(function() {
var dd = new DropDown1( $('#vv') );
$(document).click(function() {
// all DropDown1s
$('.fill_box').show('active');
});
});
以下是fiddle
使用<a>
标记,您需要点击确切的文字来触发事件。如果这不能很好地工作,那么您需要将其display
更改为阻止,#toggle { display:block;}
或者您可以将其更改为<div>
。 jsfiddle
答案 2 :(得分:1)
试试这个:
<div id="vv" class="fill_box">
Filters
</div>
$(function() {
var dd = new DropDown1( $('#vv') );
$(document).click(function() {
// all DropDown1s
$('.fill_box').show('active');
$('.dropdown1').toggle();
});
});
P.S:你在整个文件上点击了事件,不知道为什么......所以我做了同样的事情。我猜它是其他一些概念的一部分。如果没有,我建议不要使用它,而是在id=vv
div
答案 3 :(得分:1)
嗯,你可以做多件事,但我建议你不要依赖Javascript,因为有些人把它关掉或者默认情况下已关闭它所以我建议你倾向于css部分的东西......任何事情别的?