切换下拉列表保持打开状态
Toggle Drop Down List Stays Open
在我的情况下,我有一个向下切换菜单或列表的问题
问题是,当我加载页面时,菜单总是打开的(#text_box)。它应该被关闭,这样当用户点击"打开我"按钮时,它就会打开。
我已经把代码放在JSFiddle上,这里它根本不起作用,它不打开或关闭。我已经复制了所有必要的代码部分:html, css, javascript。
主要问题是在开始状态时,当我在浏览器中打开页面时,菜单/列表总是打开的。
我也使它响应台式机,平板电脑和手机。你能帮我解决这个问题吗?由于
HTML:<button onclick="toggle_visibility('text_box');">Open Me</button>
<div id="text_box">
<ul >
<li>Test_1</li>
<li>Test_2</li>
<li>Test_3</li>
<li>Test_4</li>
<li>Test_5</li>
</ul>
</div>
JavaScript:function toggle_visibility(id) {
var e = document.getElementById(id);
if(e.style.display == 'block')
e.style.display = 'none';
else
e.style.display = 'block';
}
CSS: button {
padding: 10px 15px;
background: #4479BA;
color: #FFF;
text-decoration: none;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
border: solid 1px #20538D;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), 0 1px 1px rgba(0, 0, 0, 0.2);
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), 0 1px 1px rgba(0, 0, 0, 0.2);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), 0 1px 1px rgba(0, 0, 0, 0.2);
-webkit-transition-duration: 0.2s;
-moz-transition-duration: 0.2s;
transition-duration: 0.2s;
-webkit-user-select:none;
-moz-user-select:none;
-ms-user-select:none;
user-select:none;
}
button:hover {
background: #356094;
border: solid 1px #2A4E77;
text-decoration: none;
}
button:active {
-webkit-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.6);
-moz-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.6);
box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.6);
background: #2E5481;
border: solid 1px #203E5F;
}
#text_box {
width: 200px;
margin-top: 0px;
padding: 2px 0px;
background:rgba(102,102,102,1);
color: #fff;
}
有多种方法更好的方法将放在下面:
CSS
#foo { display:none;}
jquery: CSS
JavaScript
document.getElementById("foo").style.display ="none"; /* JavaScript Solution*/
JSFiddle: JS
或
JQuery
$("#foo").hide();
JSFiddle: JQuery注意:如果你正在使用JQuery解决方案,不要忘记添加JQuery库
解决方案:
document.getElementById("foo").style.display ="none";
function toggle_visibility(id) {
var e = document.getElementById(id);
if(e.style.display == 'block')
e.style.display = 'none';
else
e.style.display = 'block';
}
button {
padding: 10px 15px;
background: #4479BA;
color: #FFF;
text-decoration: none;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
border: solid 1px #20538D;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), 0 1px 1px rgba(0, 0, 0, 0.2);
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), 0 1px 1px rgba(0, 0, 0, 0.2);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), 0 1px 1px rgba(0, 0, 0, 0.2);
-webkit-transition-duration: 0.2s;
-moz-transition-duration: 0.2s;
transition-duration: 0.2s;
-webkit-user-select:none;
-moz-user-select:none;
-ms-user-select:none;
user-select:none;
}
button:hover {
background: #356094;
border: solid 1px #2A4E77;
text-decoration: none;
}
button:active {
-webkit-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.6);
-moz-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.6);
box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.6);
background: #2E5481;
border: solid 1px #203E5F;
}
#foo {
width: 200px;
margin-top: 0px;
padding: 2px 0px;
background:rgba(102,102,102,1);
color: #fff;
}
<button onclick="toggle_visibility('foo');">Open Me</button>
<div id="foo">
<ul >
<li>Test_1</li>
<li>Test_2</li>
<li>Test_3</li>
<li>Test_4</li>
<li>Test_5</li>
</ul>
</div>
您可以尝试从将div设置为显示:none开始。
这样它总是以none开头。
你也可以把jQuery作为一个选项。
<input id="myButton" type="button" name="answerswer" />
$('#myButton').click(function() {
$('#myDiv').toggle('slow', function() {
// Animation complete.
});
});
在CSS中以display: none
开始你的div。
像这样:
function toggle_visibility(id) {
var e = document.getElementById(id);
e.style.display = (e.style.display == 'block') ? 'none' : 'block';
}
button {
padding: 10px 15px;
background: #4479BA;
color: #FFF;
text-decoration: none;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
border: solid 1px #20538D;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), 0 1px 1px rgba(0, 0, 0, 0.2);
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), 0 1px 1px rgba(0, 0, 0, 0.2);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), 0 1px 1px rgba(0, 0, 0, 0.2);
-webkit-transition-duration: 0.2s;
-moz-transition-duration: 0.2s;
transition-duration: 0.2s;
-webkit-user-select:none;
-moz-user-select:none;
-ms-user-select:none;
user-select:none;
}
button:hover {
background: #356094;
border: solid 1px #2A4E77;
text-decoration: none;
}
button:active {
-webkit-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.6);
-moz-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.6);
box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.6);
background: #2E5481;
border: solid 1px #203E5F;
}
#text_box {
width: 200px;
margin-top: 0px;
padding: 2px 0px;
background:rgba(102, 102, 102, 1);
color: #fff;
display: none;
}
<button onclick="toggle_visibility('text_box');">Open Me</button>
<div id="text_box">
<ul>
<li>Test_1</li>
<li>Test_2</li>
<li>Test_3</li>
<li>Test_4</li>
<li>Test_5</li>
</ul>
</div>
我建议你开始学习JQuery。它使这些事情变得如此简单,并且正在迅速成为做事情的标准方式。如果您刚刚开始使用JavaScript,这可能看起来像骗人的把戏。但是当你做一些简单的事情时,它会为你节省很多时间和头痛。更不用说按键了。
https://jsfiddle.net/abalter/1r29v8tj/9/