2012-12-27 2 views
0

클래스에 'close'클래스를 추가하고 요소에서 슬라이드하는이 jquery 코드가 있지만 그 중 하나가 열리면 다른 모든 개체를 닫으려고합니다. 따라서 내가 그 중 하나를 열기 위해 클릭하면 열려있는 다른 것들을 닫고 싶지만 그것을 할 수는 없습니다. HTML : 내가 처음 기능이 추가하지만, 그것을 클릭 바로 아래, 후 슬라이드 시도붕괴 패널 - 하나를 열고 닫는 방법

$(document).ready(function() { 
$('.answer').hide(); 
$('.main h2').toggle(
    function() { 
     $(this).next('.answer').slideDown(); 
     $(this).addClass('close'); 

    }, 
    function() { 
     $(this).next('.answer').fadeOut(); 
     $(this).removeClass('close'); 
    } 
    ); // end toggle 
}); // end ready 
</script> 

:

<div class="main"> 
<h2>Question 1?</h2> 
    <div class="answer"> 
    <p>bla bla bla</p> 
    </div> 
    <h2>question 2</h2> 
    <div class="answer"> 
    <p>bla bla bla</p> 
    </div> 
    <h2>Question 3?</h2> 
    <div class="answer"> 
    <p>bla bla bla</p> 
    </div> 
</div> 

내가이 jQuery를 가지고있다.

$('.main .answer').not(this).slideUp(); 
+0

이다 사용하지만, 당신은을 만들려고하고 있습니다 ** 아코디언 패널 ** 제어. jQuery를 사용하고 있기 때문에이 컨트롤의 jQueryUI 라이브러리 버전을 활용할 수도있다.이 컨트롤은 완벽하게 기능을 갖추고 있으며 매우 사용자 정의가 가능하다. http://jqueryui.com/accordion/ – mclark1129

답변

0
$(document).ready(function() { 
    $('.answer').hide(); 
    $('.cat_info h2').on('click', function() { 
     var state = $(this).next('.answer').is('.open'); 
     if (state) { 
      $(this).next('.answer').removeClass('open').fadeOut(); 
     }else{ 
      $(this).next('.answer').addClass('open').slideDown() 
        .siblings('.answer').removeClass('open').slideUp(); 
     } 
    }); 
});​ 

FIDDLE

는 참고 : toggle() 그런 식으로 난 당신이 의도적으로 여기에 자신의 솔루션을 롤하려는 경우 확실하지 않다 deprecated

+0

아무 것도 열지 않을 것이다. 그 아래로 미끄러지는 것 – user1091508

+0

ACtually 나는 바이올린으로부터 html과 js를 복사했다. 감사! 더 많은 것, 그것이 열릴 때 h2에 특정 종류를 어떻게 추가 할 것입니까? – user1091508

+0

@ user1091508 - 위와 같은 방법으로 클래스를 'H2'엘레멘트에 추가 하겠지만,'$ (this)'에는'addClass'와'removeClass'를 직접 사용하고,'.answer' 등은 쓰지 않습니다. 대답이 효과가 있다면 그것을 받아 들여야합니다. – adeneo

관련 문제