2012-04-18 102 views
1

我用這個來顯示/隱藏一些div,最後我有一個按鈕來顯示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');"> 

回答

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" />​ 
+0

您的「添加一個!」按鈕只顯示一個div並停止 – user983248 2012-04-18 23:59:13

+0

奇怪;我可以發誓我發佈了一個工作版本。對於那個很抱歉!更新*真正的工作*代碼和演示。 =/ – 2012-04-19 00:11:43

+0

對不起,但你的「再加一個!」只是顯示一個,如果再次點擊它將隱藏前一個並顯示下一個,我試圖「再添加一個!」 - 這意味着如果我點擊按鈕,我會顯示下一個div,但保留前一個(它將保持可見)。你的最新演示完美,但並不像預期的那樣。 – user983248 2012-04-19 00:16:32

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(); 
    } 
}); 
}​);​ 
+0

Yhea!這聽起來像解決方案,但你能給我一個例子嗎? – user983248 2012-04-18 23:44:36

+0

用一些代碼編輯我的答案。 – Colleen 2012-04-18 23:45:35

+0

並更新了代碼的語義正確性:) – Colleen 2012-04-18 23:53:17

-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']);">