Javascript似乎没有隐藏我的元素

时间:2015-03-03 18:22:19

标签: javascript html css

我在jsfiddle中创建了以下代码,如果我选中复选框,div Nime应该被取消隐藏,反之亦然,但它没有发生,我做错了什么?

Code in JSfiddle:
HTML:

<label>Newspaper?</label>
        <input type="checkbox" name="nieu" onclick="change()"><br/><br/>
    <div id="nime">
    <label>How?</label>
        <select name="nime"> 
            <option value="email">Email</option>
            <option value="post">Post</option>
            <option value="beide">Both</option>
        </select>
    </div>

使用Javascript:

function change(){
    which = document.getElementById('nime');

    if(which.style.display=="block"){
        which.style.display="none";
    }else{
        which.style.display="block";
    }

};

7 个答案:

答案 0 :(得分:2)

你错过了if块中的返回。

function change(){
    which = document.getElementById('nime');
    if(which.style.display=="block"){
        which.style.display="none";
        return;
    }
    which.style.display="block"
}

答案 1 :(得分:2)

the classList API Element.querySelector() API

一起使用

&#13;
&#13;
function change(){
    which.classList.toggle('visibility');// toggle a given class each time we click on the element woth the name nieu
};

var which = document.querySelector('#nime'),// get element with ID=nime
    //which = document.querySelector('[id=nime]'),
    nieu = document.querySelector('[name=nieu]');// get element with name=nime
// add the click event to nieu
nieu.addEventListener("click", change, false)
&#13;
.visibility{ /*this is our class to hide the element*/
  display: none
}
&#13;
<label>Newspaper?</label>
        <input type="checkbox" name="nieu"><br/><br/>
    <div id="nime">
    <label>How?</label>
        <select name="nime"> 
            <option value="email">Email</option>
            <option value="post">Post</option>
            <option value="beide">Both</option>
        </select>
    </div>
&#13;
&#13;
&#13;

与加载时的隐藏状态相同,只需添加类.visibility

&#13;
&#13;
function change(){
    which.classList.toggle('visibility');
};

var which = document.querySelector('#nime'),
    nieu = document.querySelector('[name=nieu]');

nieu.addEventListener("click", change, false)
&#13;
.visibility{
  display: none
}
&#13;
<label>Newspaper?</label>
<input type="checkbox" name="nieu"><br/><br/>
<div id=nime class=visibility>
  <label>How?</label>
  <select name="nime"> 
    <option value="email">Email</option>
    <option value="post">Post</option>
    <option value="beide">Both</option>
  </select>
</div>
&#13;
&#13;
&#13;

替代javascript

你可以使用jquery让你的生活更轻松,但推荐使用JS

&#13;
&#13;
$('[name=nieu]').click(function(){
    $('#nime').toggleClass("visibility")
})
&#13;
.visibility{
  display: none
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<label>Newspaper?</label>
<input type="checkbox" name="nieu"><br/><br/>
<div id="nime">
  <label>How?</label>
  <select name="nime"> 
    <option value="email">Email</option>
    <option value="post">Post</option>
    <option value="beide">Both</option>
  </select>
</div>
&#13;
&#13;
&#13;

在加载时隐藏元素只需将类添加到其中

&#13;
&#13;
$('[name=nieu]').click(function(){
    $('#nime').toggleClass("visibility")
})
&#13;
.visibility{
  display: none
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<label>Newspaper?</label>
<input type="checkbox" name="nieu"><br/><br/>
<div id="nime" class=visibility><!-- add class visibility-->
  <label>How?</label>
  <select name="nime"> 
    <option value="email">Email</option>
    <option value="post">Post</option>
    <option value="beide">Both</option>
  </select>
</div>
&#13;
&#13;
&#13;

或者如果您不想添加css

Jquery方法

&#13;
&#13;
$('[name=nieu]').click(function(){
    $('#nime').is(":visible") ? $('#nime').hide(): $('#nime').show()
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<label>Newspaper?</label>
<input type="checkbox" name="nieu"><br/><br/>
<div id="nime" class=visibility><!-- add class visibility-->
  <label>How?</label>
  <select name="nime"> 
    <option value="email">Email</option>
    <option value="post">Post</option>
    <option value="beide">Both</option>
  </select>
</div>
&#13;
&#13;
&#13;

javascript方法

&#13;
&#13;
function change(){
    which.style.display == "none"? which.style.display = "block" : which.style.display = "none"
};

var which = document.querySelector('[id=nime]'),
    nieu = document.querySelector('[name=nieu]');
    
nieu.addEventListener("click", change, false)
&#13;
<label>Newspaper?</label>
<input type="checkbox" name="nieu"><br/><br/>
<div id="nime">
  <label>How?</label>
  <select name="nime"> 
    <option value="email">Email</option>
    <option value="post">Post</option>
    <option value="beide">Both</option>
  </select>
</div>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

if语句之后的内容总是会运行,因为函数不会因为if条件为真而停止。此外,您将值设置为block的语句具有double =&#39; s。它不应该。

if(which.style.display=="block"){
    which.style.display="none";
} else {
    which.style.display="block";
}

答案 3 :(得分:0)

在你的JSFiddle中,请改变你声明你的函数以使其成为全局的方式,或者将JS设置为No Wrap(在头部)。 (See this question for more info

window.changing = function() { // }

初始帖子中的其他注释:当您将显示设置为阻止时,您有两个相同的符号,这不会设置值。用一个。此外,您需要在if语句中返回(或if / else),否则它将始终运行其余代码。

window.changing = function() {
    which = document.getElementById('nime');

    if(which.style.display=="block"){
        which.style.display="none";
        return; // otherwise the line below is always shown
    }

    which.style.display = "block"; ///// THIS LINE I EDITED
};

答案 4 :(得分:0)

首先,你需要在设置“display = none”时退出函数change()或在“else”语句中包装“display = block”,否则它将设置“display = block”无论如何什么是以前的价值。

实际上,你当前没有在if()之后设置“display = block”,因为你正在使用比较运算符(“==”)而不是赋值运算符(“=”)。

你的职能改变()应该是:

function change(){
    which = document.getElementById('nime');

    if(which.style.display=="block") {
        which.style.display="none";
        return;
    }
    which.style.display="block";
};

function change(){
    which = document.getElementById('nime');

    if(which.style.display=="block") {
        which.style.display="none";
    }
    else {
        which.style.display="block";
    }
};

答案 5 :(得分:0)

使用onchange事件和函数如下

function change(){
var which = document.getElementById('nime');
var display = window.getComputedStyle(which, null).getPropertyValue('display');

if(display == 'none') {
    which.style.display = 'block';
    return;
}

if (display == 'block') {
 which.style.display = 'none';
    return;
}

}

HTML

<label>Newspaper?</label>
    <input type="checkbox" name="nieu" onchange="change()"><br/><br/>
<div id="nime">
<label>How?</label>
    <select name="nime"> 
        <option value="email">Email</option>
        <option value="post">Post</option>
        <option value="beide">Both</option>
    </select>
</div>

http://jsfiddle.net/pwx0gs2e/23/

答案 6 :(得分:0)

这只是一种仅使用css

的替代方案

General sibling selectors

#nime{display: none}
[name=nieu]:checked ~ #nime{display: block}
<label>Newspaper?</label>
<input type="checkbox" name="nieu"><br/><br/>
<div id="nime">
  <label>How?</label>
  <select name="nime"> 
    <option value="email">Email</option>
    <option value="post">Post</option>
    <option value="beide">Both</option>
  </select>
</div>

css adjacent selector

删除<br/><br/>

#nime{display: none;clear: both}
[name=nieu]:checked + #nime{display: block}
<label>Newspaper?</label>
<input type="checkbox" name="nieu">
<div id="nime">
  <label>How?</label>
  <select name="nime"> 
    <option value="email">Email</option>
    <option value="post">Post</option>
    <option value="beide">Both</option>
  </select>
</div>