2013-05-16 2 views
0

한 번에 하나의 div 만 열어 볼 수있는 간단한 방법을 찾고 있습니다. 나는 accordian 작풍 수직 항법을 사용하고 1 개를 클릭 할 때, 아래에 div를 표시하고, 다른 것을 클릭 할 때, 똑같이한다. 이전 div가 다른 nav 링크를 클릭하면 다시 숨기고 싶습니다.자바 스크립트 토글 (한 번에 하나씩)

이가 가까이 열고하세요 위해 사용하는 자바 스크립트 메신저입니다 : 내가 다른이 열려있는 경우 그 사업부를 닫습니다 추가 할 수 있습니다 뭔가 다른

<script type="text/javascript"> 
<!-- 
function toggle_visibility(id) { 
    var e = document.getElementById(id); 
    if(e.style.display == 'block') 
     e.style.display = 'none'; 
    else 
     e.style.display = 'block'; 
} 
//--> 
</script> 

있습니까?

+1

jQuery를 사용하고 있습니까? 그렇다면 이것은 매우 쉬울 수 있습니다. –

+0

실제로 jQuery UI는 자신 만의 아코디언을 가지고있다. http://jqueryui.com/accordion/ – Duffmaster33

+0

jQuery를 사용하면'.hide()'와'.show (.)'요소를 사용하면 요소가 보이는지 쉽게 확인할 수 있습니다 – Epsil0neR

답변

2

아주 간단한 방법은 바로 이전에 열었던 요소를 추적하는 것입니다 Divs에 "menudiv"와 같은 고유 한 클래스 이름을 부여한 다음 함수에 다음과 같은 내용을 추가하면됩니다.

var menu_divs = document.getElementsByClassName("menudiv"); 
for (var i = 0; i < menu_divs.length; i++) { 
    if (menu_divs[i] != e) 
     menu_divs[i].style.display = 'none'; 
} 
+0

+1 .. 문제의 모든 div를 반복하지 않고 매끄러운 솔루션 –

+0

div가 작동하지 않아 div가 열리지 않거나 닫히지 않았습니다. hm .. –

+0

@ 에반 :'opened_element'이'null'인지 테스트를 건너 뛸 수 있다고 생각했지만, 할 수 없습니다. 코드가 수정되었으므로 이제 작동합니다. –

0

모두 같은 등급을 지정하십시오. 클래스 이름별로 모두 숨기고 전달 된 ID로 클릭 한 것을 표시하십시오.

0

가장 좋은 방법은하는 것입니다

  • 사용 CSS가 된 DIV 모두를 숨길
  • 하나를 표시 할
  • ; "활성"또는 무엇이든간에 클래스를 열린 div에 추가하십시오.
  • 그런 다음 CSS를 display : block 또는 그 밖의 클래스와 함께 적용하십시오. 제이슨로

는 jQuery를 사용하여이 작업을 수행 할 수 또는 당신이없이 할 수있는 자신의 코멘트했다.

jQuery는 애니메이션 지원과보다 쉬운 클래스 조작을 제공합니다.

(function() { // using an IIFE to prevent polluting the global namespace 
    var opened_element = null; 

    window.toggle_visibility = function(id) { 
     var e = document.getElementById(id); 
     if (opened_element && opened_element !== e) { 
      opened_element.style.display = 'none'; 
     } 
     if(e.style.display == 'block') { 
      e.style.display = 'none'; 
     } 
     else { 
      e.style.display = 'block'; 
     } 
     opened_element = e; 
    }; 
}()); 
0

당신이 jQuery를 사용하지 않는 때문에, 나는 당신이 할 수있는, 당신은 자바 스크립트 대답을 원하는 가정

jQuery Toggle Class

+0

좋은 방법처럼 들리지만, 이미 div로 열거 나 닫는 클래스로 명명 된 div가있는 경우에는 어떻게해야합니까? –

+0

오케이 그래서 실수 였어, 클래스 이름이 없었어. 그래서 나는 각각의 클래스에 menudiv라는 클래스 이름을 추가했지만 성공하지 못했다. –

관련 문제