Javascript 使用文档单击功能事件后未显示菜单
我目前正在为我的网站创建多个导航按钮,每个按钮都会显示菜单 例如,这是第一个菜单:Javascript 使用文档单击功能事件后未显示菜单,javascript,html,css,Javascript,Html,Css,我目前正在为我的网站创建多个导航按钮,每个按钮都会显示菜单 例如,这是第一个菜单: <div class="outer-bar"> <ul class="down-bar" style="list-style:hidden"> <li> <label id="down-nav-1" class="down-nav" onclick="Dropdown1()">Knives <b class="c
<div class="outer-bar">
<ul class="down-bar" style="list-style:hidden">
<li>
<label id="down-nav-1" class="down-nav" onclick="Dropdown1()">Knives <b class="caret_down">▼</b></label>
<div class="mainsizer">
<div class="dropdown-menus" id="dropdown-menu-1">
<a href=/?search=M9%20Bayonet&type=weapon class="Text1"><label class="m9_bayonet" style="width:30px;height:30px;position:absolute;top:5px;left:5px;cursor:pointer;"></label>M9 Bayonet</a>
<a href=/?search=Karambit&type=weapon class="Text1"><label class="karambit" style="width:30px;height:30px;position:absolute;left:5px;top:59px;cursor:pointer;"></label>Karambit</a>
<a href=/?search=Bayonet&type=weapon class="Text1"><label class="bayonet" style="width:30px;height:30px;position:absolute;left:5px;top:116px;cursor:pointer;"></label>Bayonet</a>
<a href=/?search=Butterfly%20Knife&type=weapon class="Text1"><label class="butterfly" style="width:30px;height:30px;position:absolute;left:5px;top:170px;cursor:pointer;"></label>Butterfly Knife</a>
<a href=/?search=Flip%20Knife&type=weapon class="Text1"><label class="flip" style="width:30px;height:30px;position:absolute;left:5px;top:225px;cursor:pointer;"></label>Flip Knife</a>
<a href=/?search=Falchion%20Knife&type=weapon class="Text1"><label class="falchion" style="width:30px;height:30px;position:absolute;left:5px;top:280px;cursor:pointer;"></label>Falchion Knife</a>
<a href=/?search=Gut%20Knife&type=weapon class="Text1"><label class="gut" style="width:30px;height:30px;position:absolute;left:5px;top:334.5px;cursor:pointer;"></label>Gut Knife</a>
<a href=/?search=Shadow%20Daggers&type=weapon class="Text1"><label class="shadow" style="width:30px;height:30px;position:absolute;left:5px;top:390px;cursor:pointer;"></label>Shadow Daggers</a>
<a href=/?search=Huntsman%20Knife&type=weapon class="Text1"><label class="huntsman" style="width:30px;height:30px;position:absolute;left:5px;top:444px;cursor:pointer;"></label>Huntsman Knife</a>
<a href=/?search=Bowie%20Knife&type=weapon class="Text1"><label class="bowie" style="width:30px;height:30px;position:absolute;left:5px;top:498.5px;cursor:pointer;"></label>Bowie Knife</a>
</div>
</div>
</li>
所有这些都可以正常工作,请参阅。(只有“刀”按钮在atm机上工作)
但后来我尝试添加一个功能,因此当用户在菜单外单击时,显示将再次设置为“无”:
function Dropdown1() {
document.getElementById("dropdown-menu-1").style.display = "inline-block";
document.getElementById("down-nav-1").style.cssText = "border: solid 3px gray;background-color: gray;border-radius: 10px;";
}
$(document).click(function(event) {
if(!$(event.target).closest('#dropdown-menu-1').length) {
if ( ($('#dropdown-menu-1').style.display = "None" ) {
$('#dropdown-menu-1').style.display = "inline-block";
}
}
})
添加此代码后,单击按钮时将不会执行任何操作。()
我不了解其中的具体问题,但请注意,我对Javascript是新手,对其中的很多东西都不了解
有什么问题吗?我可以用纯Javascript来实现这一点,还是应该在这种情况下使用jquery?如果您使用的是jquery,请始终如一地使用它。不要混合使用jQuery和香草JavaScript。要完成这样一个非常简单的下拉列表,只需使用JavaScript来仅更改类,而不是原始效果。所有其他的都应该由CSS处理 从技术上讲,仅使用HTML和CSS就可以实现这一点。外面有1000多个例子。此外,您还应该使用事件处理程序,而不是单个下拉列表的函数,因为这样更有利于可伸缩性 首先,在CSS中更改以下内容:
.mainsizer.open .dropdown-menus {
display: block;
}
在JavaScript中,执行以下操作:
$(function () {
$("label").click(function () {
if ($(this).next(".mainsizer").hasClass("open"))
$(this).next(".mainsizer").toggleClass("open");
else {
$(".open").removeClass("open");
$(this).next(".mainsizer").addClass("open");
}
});
});
最终,您应该拥有以下代码:
$(函数(){
$(“标签”)。单击(函数(){
if($(this).next(“.mainsizer”).hasClass(“打开”))
$(this.next(“.mainsizer”).toggleClass(“打开”);
否则{
$(“.open”).removeClass(“open”);
$(this.next(“.mainsizer”).addClass(“open”);
}
});
});代码>
。外部栏{
位置:相对位置;
显示:块;
z指数:1;
文本对齐:居中;
顶部:55px;
背景色:黑色;
高度:60px;
宽度:100%;
}
.下杆{
列表样式类型:无;
字体大小:105%;
}
.下杆李{
显示:内联块;
边缘顶部:15px;
保证金权利:2%;
垂直对齐:顶部;
}
.向下导航{
z指数:1
字体大小:105%;
颜色:白色;
字体系列:“Lato”;
光标:指针;
过渡:所有0.1秒轻松;
-moz转换:所有0.1秒的易用性;
}
.向下导航:悬停{
颜色:白色;
边框:实心3倍灰色;
背景颜色:灰色;
边界半径:10px;
字体系列:“Lato”;
}
李海军{
显示:内联块;
}
.插入符号向下{
字体大小:30%;
}
梅因西泽先生{
位置:绝对位置;
宽度:164px;
}
.下拉菜单{
显示:无;
位置:绝对位置;
宽度:164px;
右:5%;
背景色:黑色;
盒影:0px 8px 16px 0px rgba(0,0,0,0.2);
z指数:99;
过渡:0.1s缓进;
边缘顶部:5px;
}
.下拉菜单a{
颜色:白色;
文本对齐:居中;
字号:0.9em;
填充:8%0px 15%0%;
右:10%;
文字装饰:无;
显示:块;
列表样式类型:无;
空白:nowrap;
左边缘:0%;
文本缩进:4%;
字体系列:“Lato”;
}
.下拉菜单a:悬停{
背景颜色:灰色;
}
.mainsizer.open.下拉菜单{
显示:块;
}
-
刀具▼;
-
手枪▼;
-
SMGs&9660;
-
步枪▼;
-
狙击手▼;
-
重型▼;
-
其他▼;
如果您正在使用jQuery,请始终如一地使用它。不要混合使用jQuery和香草JavaScript。要完成这样一个非常简单的下拉列表,只需使用JavaScript来仅更改类,而不是原始效果。所有其他的都应该由CSS处理
从技术上讲,仅使用HTML和CSS就可以实现这一点。外面有1000多个例子。此外,您还应该使用事件处理程序,而不是单个下拉列表的函数,因为这样更有利于可伸缩性
首先,在CSS中更改以下内容:
.mainsizer.open .dropdown-menus {
display: block;
}
在JavaScript中,执行以下操作:
$(function () {
$("label").click(function () {
if ($(this).next(".mainsizer").hasClass("open"))
$(this).next(".mainsizer").toggleClass("open");
else {
$(".open").removeClass("open");
$(this).next(".mainsizer").addClass("open");
}
});
});
最终,您应该拥有以下代码:
$(函数(){
$(“标签”)。单击(函数(){
if($(this).next(“.mainsizer”).hasClass(“打开”))
$(this.next(“.mainsizer”).toggleClass(“打开”);
否则{
$(“.open”).removeClass(“open”);
$(this.next(“.mainsizer”).addClass(“open”);
}
});
});代码>
。外部栏{
位置:相对位置;
显示:块;
z指数:1;
文本对齐:居中;
顶部:55px;
背景色:黑色;
高度:60px;
宽度:100%;
}
.下杆{
列表样式类型:无;
字体大小:105%;
}
.下杆李{
显示:内联块;
边缘顶部:15px;
保证金权利:2%;
垂直对齐:顶部;
}
.向下导航{
z指数:1
字体大小:105%;
颜色:白色;
字体系列:“Lato”;
光标:指针;
过渡:所有0.1秒轻松;
-moz转换:所有0.1秒的易用性;
}
.向下导航:悬停{
颜色:白色;
边框:实心3倍灰色;
背景颜色:灰色;
边界半径:10px;
字体系列:“Lato”;
}
李海军{
显示:内联块;
}
.插入符号向下{
字体大小:30%;
}
梅因西泽先生{
位置:绝对位置;
宽度:164px;
}
.下拉菜单{
显示:无;
位置:绝对位置