Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.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手风琴功能赢得';我跑不了?_Javascript - Fatal编程技术网

Javascript手风琴功能赢得';我跑不了?

Javascript手风琴功能赢得';我跑不了?,javascript,Javascript,我对编写Javascript还不熟悉,所以我正在尝试编写自己的简单手风琴函数。我试图使它成为这样,当我点击h2时,它会显示“accordion-#”div。如果手风琴已经打开(“display=block”),我想隐藏它(“display=none”)。当我点击h2时,什么也没发生。我搜索了所有地方,但我没有发现我的代码有什么问题: function initiate(i) { var selected = document.getElementById('accordion-'+i).

我对编写Javascript还不熟悉,所以我正在尝试编写自己的简单手风琴函数。我试图使它成为这样,当我点击h2时,它会显示“accordion-#”div。如果手风琴已经打开(“display=block”),我想隐藏它(“display=none”)。当我点击h2时,什么也没发生。我搜索了所有地方,但我没有发现我的代码有什么问题:

function initiate(i) {
    var selected = document.getElementById('accordion-'+i).style.display;
    if(selected == "block") {
        selected = "none";
    } else {
    selected = "block";
    }
}
示例HTML

<h2 onClick="initiate('6')">Project</h2>
<!-- begin code to hide/show -->
<div id="accordion-6" class="accordion">
    <div class="left">
         <p>left column text</p>
    </div>
    <div class="right">
         <p>right column text</p>
    </div>
</div> <!-- end code to hide/show -->

`

有几件事-首先,您正在创建的变量“selected”不是您所想的;它不是可以更改为目标源元素的style属性的对象。它是一个存储属性值的字符串。要实现您想要的功能,您需要将元素存储为var,然后使用“.style.display=”对其进行更改。大概是这样的:

var TargetDiv = document.getElementById('accordion-'+i);
    if(TargetDiv.style.display == "block" || TargetDiv.style.display == "") {
        TargetDiv.style.display = "none";
    } 
    else {
        TargetDiv.style.display = "block";
    }
您将看到我所做的另一个更改是您的IF条件还需要检查空的style.display值;这是因为即使您通过CSS将其设置为“block”,实际DIV的标记上也没有“style”属性,因此style.display在页面加载时(即,当您第一次针对给定DIV运行函数时)为空


jsFiddle:

我现在明白了。我的变量只是将显示值存储为字符串,而不是从我试图指向的div框中创建一个对象。现在有道理了。我也明白了为什么要更改if语句。非常感谢!
var TargetDiv = document.getElementById('accordion-'+i);
    if(TargetDiv.style.display == "block" || TargetDiv.style.display == "") {
        TargetDiv.style.display = "none";
    } 
    else {
        TargetDiv.style.display = "block";
    }