【问题标题】:Show/Hide divs, "one by one" and "all at once"显示/隐藏 div,“一个接一个”和“一次全部”
【发布时间】:2012-04-30 11:18:40
【问题描述】:

我正在使用它来显示/隐藏一些 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');">

【问题讨论】:

    标签: javascript toggle togglebutton


    【解决方案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" />​
    

    【讨论】:

    • 奇怪;我可以发誓我发布了一个工作版本。对于那个很抱歉!更新了真正有效的代码和演示。 =/
    • 抱歉,您的“再添加一个!”只显示一个,如果您再次单击它会隐藏上一个并显示下一个,我正在尝试“再添加一个!” - 这意味着如果我单击按钮,我将显示下一个 div,但保留前一个(它将保持可见)。您最新的演示工作完美,但不如预期。
    • 哦,真的吗?啊。我以为是你的疏忽,抱歉。给我一两分钟,它就会被删除! =) 已编辑,更近一点吗?
    • 很高兴听到这个消息!而且,老实说,你很受欢迎;我很高兴能帮上忙 =)
    • 通常更适合在 'none' 和 '' (空字符串)之间切换,以便可见元素采用其默认或继承显示,而不是设置为可能不合适的值。
    【解决方案2】:

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

    <button id="showhideall">
    
    $(document).ready(function(){
    
    var allshowing = true;
    
    $("#showhideall").click(function(){
        alert(allshowing);
        if(allshowing){
            $(".foo").hide();
            allshowing=false;            
        } else {
            $(".foo").show();
        }
    });
    }​);​
    

    【讨论】:

    • 是的!这听起来像是解决方案,但你能给我举个例子吗?
    • 您能否再解释一下您的代码,您的代码中包含 box1、box2 和 box3 的位置?
    • @Colleen,我认为您应该明确表示您没有使用纯 JavaScript。其他人应该知道他们需要使用 JQuery 才能工作
    • @Christian 我有这个想法,然后驳回了它......我想我不应该有 :) 感谢您指出! OP,html 就是你拥有它的方式,除了你需要为每个 div 添加类“foo”,并添加按钮。
    【解决方案3】:
    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']);">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-21
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      • 2013-02-03
      相关资源
      最近更新 更多