显示/隐藏div,“一个接一个”和“一下子”

时间:2012-04-18 23:39:32

标签: javascript toggle togglebutton

我用它来显示/隐藏一些div,最后我有一个按钮来逐个显示div。

我怎样才能有第二个按钮一次显示/隐藏所有这些按钮而不会弄乱HTML?

基本上每个div都包含一个输入字段,因此用户单击“再添加一个”按钮以获得额外的字段。默认情况下,所有字段都是隐藏的,所以我需要一个按钮来同时显示所有字段(我有14个显示/隐藏的div)。

任何帮助将不胜感激。

的Javascript

var counter = 0;
var numBoxes = 3;
function toggle4(showHideDiv) {
       var ele = document.getElementById(showHideDiv + counter);
       if(ele.style.display == "block") {
              ele.style.display = "none";
       }
       else {
              ele.style.display = "block";
       }
       if(counter == numBoxes) {
                document.getElementById("toggleButton").style.display = "none";
       }
}

HTML

<table>
   <tr>
      <td style="width: 150px;">
         <div id="box1" style="display: none;">First</div>
      </td>
      <td style="width: 150px;">
         <div id="box2" style="display: none;">Second</div
      </td>
      <td style="width: 150px;">
         <div id="box3" style="display: none;">Third</div
      </td>
   </tr>
</table>
<input id="toggleButton" type="button" value="Add one more!" onclick="counter++; toggle4('box');">

3 个答案:

答案 0 :(得分:1)

这是基本功能,但需要进行一些改进:

var d = document,
    table = d.getElementsByTagName('table')[0],
    divs = table.getElementsByTagName('div'),
    toggle = d.getElementById('toggleButton'),
    allToggle = d.getElementById('allToggle'),
    count = 0;

function toggles(){    
    var elem = divs[count];
    elem.style.display = 'block';

    count++;
}

toggle.onclick = function(){
    toggles();
};

allToggle.onclick = function(){
    if (allToggle.getAttribute('data-show') == 1){
        for(var i=0,len=divs.length;i<len;i++){
            divs[i].style.display = 'none';
            allToggle.setAttribute('data-show',0);
            allToggle.value = 'Show all';
        }
    }
    else {
        for(var i=0,len=divs.length;i<len;i++){
            divs[i].style.display = 'block';
            allToggle.setAttribute('data-show',1);
            allToggle.value = 'Hide all';
        }
    }
}
​

JS Fiddle demo

以上基于以下HTML:

<table>
   <tr>
      <td style="width: 150px;">
         <div id="box1" style="display: none;">First</div>
      </td>
      <td style="width: 150px;">
         <div id="box2" style="display: none;">Second</div>
      </td>
      <td style="width: 150px;">
         <div id="box3" style="display: none;">Third</div>
      </td>
   </tr>
</table>
<input id="toggleButton" type="button" value="Add one more!" />
<input id="allToggle" type="button" value="Show all" />​

答案 1 :(得分:0)

有一个按钮,其功能可以按类(您必须添加)选择所有div,并隐藏/显示它们。如果您只想要一个按钮,则必须记住您的状态,在下面的示例中,我使用全局。

<button id="showhideall">

$(document).ready(function(){

var allshowing = true;

$("#showhideall").click(function(){
    alert(allshowing);
    if(allshowing){
        $(".foo").hide();
        allshowing=false;            
    } else {
        $(".foo").show();
    }
});
}​);​

答案 2 :(得分:-1)

var counter = 0;
var numBoxes = 3;
function toggle4(showHideDiv) {
       var ele = document.getElementById(showHideDiv + counter);
       if(ele.style.display == "block") {
              ele.style.display = "none";
       }
       else {
              ele.style.display = "block";
       }
       if(counter == numBoxes) {
                document.getElementById("toggleButton").style.display = "none";
       }
}

function toggle3(contentDiv) {
        if (contentDiv.constructor == Array) {
                for(i=0; i < contentDiv.length; i++) {
                     toggle2(contentDiv[i]);
                }
        }
        else {
               toggle2(contentDiv);
        }
}

function toggle2(showHideDiv) {
    var ele = document.getElementById(showHideDiv);

    if(ele.style.display == "block") {
            ele.style.display = "none";

      }
    else {
        ele.style.display = "block";

    }
}

<input id="toggleButton" type="button" value="Show me the money!" onclick="counter++; toggle4('box');">

<input type="button" value="Press me to toggle all 3 DIVs" onClick="toggle3(['box1', 'box2', 'box3']);">