Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用JS显示/隐藏Div_Javascript_Html - Fatal编程技术网

Javascript 使用JS显示/隐藏Div

Javascript 使用JS显示/隐藏Div,javascript,html,Javascript,Html,我在一个个人网站上工作,我试图在点击图片时显示/隐藏,但我不确定问题出在哪里 HTML <div id="menuopen"> <a href="#" onclick="toggle('menu');"> <img src="assets/Images/menu.gif" alt="Menu"> </a> </div> <div id="menu"> <ul> <

我在一个个人网站上工作,我试图在点击图片时显示/隐藏,但我不确定问题出在哪里

HTML

<div id="menuopen">
    <a href="#" onclick="toggle('menu');">
        <img src="assets/Images/menu.gif" alt="Menu">
    </a>
</div>

<div id="menu">
 <ul>
     <li><a href="index.html">Home</a></li>
     <li><a href="index.html">Home</a></li>
     <li><a href="index.html">Home</a></li>
     <li><a href="index.html">Home</a></li>
 </ul>
</div>

JS

<script type="text/javascript">
<!--
function toggle(id) { 
var item = document.getElementById(id);

if(item.style.display == 'block')
item.style.display = 'none';
else
item.style.display = 'block';  }
//-->


顺便说一句,这个脚本在使用纯文本而不是图像时也不起作用,因此我认为我的问题不在这里。

我没有太多时间来分析,但我建议使用带有单击触发器的体内函数,而不是预定义函数。类似于小提琴里的东西:


希望这有帮助,让我知道如果你想要一些澄清,我会尽我所能

检查这个。简单解释一下,您的函数正在检查元素的display属性是否附加了错误的
值-默认情况下,此属性为空。因此,更应该请求
none
空的
(默认)值


有时,样式属性在JavaScript中设置之前是空的/没有意义的。您可以先在JS中设置值,也可以让JS假设为启动状态

解决方案1-从JS设置状态:

var s = document.getElementById('menu').style;
s.display = 'block';
function toggle() { 
   if(s.display == 'block') { s.display = 'none'; }
   else { s.display = 'block'; }
}
解决方案2-假设未设置意味着它是可见的

function toggle(id) { 
   var s = document.getElementById('menu').style;
   s.display = (s.display!=='block' ? 'block' : 'none');
}

你能提供一个答案吗?我链接了一个非常类似的问题。好奇为什么不使用jQuery——它使这变得更容易。虽然想要使用vanilla JS学习是完全正确的:),但是控制台上是否也有错误?尝试将
alert()
s放入函数中,以确保代码到达那里。工作非常好->因此您决定将其转换为jQuery并发布一个链接作为答案(指向与问题不太接近的代码)?根据Adeneo的说法,这是可行的,所以我不确定为什么我不能让它正常工作为什么要重新发明轮子?而且,现在我有时间看一下,它看起来确实很好用。我猜你在别的地方有干扰。davidkonrad指出了{}的不足,但这不应该影响功能(这只是简写)。我猜还有其他因素影响功能。你在哪里加载脚本?我肯定它在你剧本的开头,但值得一看。另外,页面上还有多少其他脚本(如果有的话)?您可能希望更改if to be item.style.display!='“无”或添加“Style=”显示:无“走进你的房间。。。否则,第一次切换需要点击两下。你的方法没有任何意义!你是说我们应该在每次页面加载时迭代文档中的所有元素,并将
block
属性附加到它们的样式中?!换句话说,你的函数不是一个解决方案。我不知道你在说什么。你说这“不是一个解决方案”,但结果是一样的。你说它“迭代所有元素…并附加块”到它们;我的代码没有这样做,它向一个特定元素添加了一个块。从性能的角度来看,这是一种哲学上的差异。由于getElementById的位置,您的解决方案(即我的第二个解决方案)在每次单击事件时都会做更多的工作,而第一个解决方案会提前完成这项工作,因此您不必每次都按Id进行搜索。无论哪种方式,性能的影响都是不可察觉的。我喜欢解决方案1的一点是,对我来说,它更具可读性。您假设菜单以块开始,然后在块或无之间切换。我的解决方案1明确地讲述了整个故事。我的解决方案#2和你的解决方案,不要明确地讲述这个故事,所以我觉得它的可读性和可维护性较差。如果您对起点有假设,请将这些假设编码到中。它不仅保证了这些出发点,而且当你回头阅读时,你可以看到这个假设。
function toggle(id) { 
   var s = document.getElementById('menu').style;
   s.display = (s.display!=='block' ? 'block' : 'none');
}