2012-01-08 3 views
2

최근에 Jake Rutter가 'Smashing jQuery'를 구입했습니다. 좋은 책이지만, '아코디언'코드를 수정해야합니다.두 번째 클릭시 jQuery 아코디언 효과를 닫으려면 어떻게해야합니까?

섹션을 클릭하면 해당 섹션이 의도 한대로 확장되지만 두 번째로 클릭하면 (열린 상태에서) 섹션이 즉시 닫히고 다시 열립니다.

두 번 클릭하면 펼쳐진 섹션을 닫고 싶습니다. 클릭하면 다시 열 수 있습니다. 희망이 의미가 있습니다. 어떤 도움이라도 대단히 감사 할 것입니다.

내가 사용한 예와 코드는 아래의 데모 URL을 참조하십시오.

http://api.jquery.com/slideUp/

당신이 다른 때마다 당신이이 모든 코드를 실행하는 것입니다 섹션을 클릭 클릭 기능에 약간의 경우/다른 논리를 추가해야합니다 http://demos.d3-creative.com/accordion/accordion-1.html

답변

0

작동하려면 아래와 같은 것이 필요합니다.

var $header = $('.accordion-header'),//always cache your selectors 
    $content = $('.accordion-content'); 

$header.click(function() { 

    var $this = $(this), 
     $relatedContent = $this.next(); 

    if($relatedContent.is(':visible')) { // If the tab is already open 

     $relatedContent.slideUp('fast'); 

     $this.find('.icon-active').removeClass('icon-active'); 

     $this.removeClass('header-active'); 

    } else { // if the tab is closed 

     // Close any other opened tabs 
     $content.slideUp('fast'); 
     $header.removeClass('header-active'); 
     $header.find('span').removeClass('icon-active'); 

     // Open related tab 
     $relatedContent.slideDown('fast'); 

     $this.find('span').addClass('icon-active'); 

     $this.addClass('header-active'); 
    } 

}); 

을 그리고 당신은 JS 부분에서 변경할 필요가 display:none

+0

Thanks Sandeep,하지만이 코드를 가져올 수 없습니다. 일하다? – StephenMeehan

+0

콘솔에서 어떤 오류가 발생했는지 또는 어떤 부분이 작동하지 않는지 알 수 있습니까? 내 샘플 코드는 당신에게 아이디어를 줄뿐입니다. – Sandeep

+0

Ben의 jsFiddle을 확인한 후에 구문 오류가 수정되었습니다. – Sandeep

0

는 읽기가 기능.

+0

위젯 로직을 우회하여 어떻게 든이 내부 상태를 엉망으로 만들지 않겠는가? – millimoose

+0

빠른 답장을 보내 주셔서 감사합니다. 아래의 링크처럼 작동하길 원합니다. 나는 (링크에서) 코드 편집을 시도했지만 내가 원하는 것을하기 위해 그것을 얻을 수 없다. (그것이 내가 책을 구입 한 이유이다.) http://jqueryui.com/demos/accordion/#collapsible – StephenMeehan

+0

jsfiddle에서 코드를 설정 한 다음 예제/응답이 이미 제공되어야합니다. –

0

#accordion .accordion-content에 추가 : 코멘트를 참조하면 머리글을 클릭 할 때마다 그래서 나는 동작을 변경 한

$('.accordion-header').click(function() { 
    $('.accordion-header').next().slideUp('fast'); // Close all boxes - Hide all contents 
    $('.accordion-header').removeClass('header-active'); // Remove active class from all headers 
    $(this).addClass('header-active'); // Adds active class to currently clicked element 
    $(this).next().slideDown('fast'); // Shows content 

    $('.icon-active:visible').removeClass('icon-active'); 
    $(this).find('span').addClass('icon-active'); 

}); 

먼저 모든 내용 상자를 닫은 다음 모든 머리글에서 활성 클래스를 제거한 다음 클릭 된 요소 다음에 상자를 직접 열고 해당 클래스도 변경합니다. 볼 수있는 것처럼 코드가 주석 처리되었습니다! 여기

Exemple : 또한 http://jsfiddle.net/snzSy/

, 나는 아이콘에 대해 마지막 두 줄을 수정하지 않았다!

사이드 노트 : 우리는 모두 여기 초보자이기 때문에 질문을 준비하는 데 시간이 많이 걸리면 사람들이 당신을 도울 것이라고 쉽게 말할 수 있습니다. 우리가 코드를 직접 테스트하고 수정할 수 있기 때문에 JS 피들이 좋다. ...

+0

나를 위해 이것을 가져 주셔서 감사합니다. 나는 미래에 JS 바이올린을 사용할 것이다.내 파일에 코드를 저장하고 JS 바이올린 페이지를 확인해 주셔서 친절하게 설정하고 필요한 효과를 얻지 못하셨습니까? 내가 놓친 게 있니? – StephenMeehan

+0

감사합니다. 내가 작업에서 제공 한 대답을 멈추는 문법 오류를 수정했습니다. – Sandeep

+0

Ben, Sandeep의 솔루션이 다시 작동했습니다. 이것에 대한 여러분의 시간과 노력에 감사드립니다. 지금부터 JS Fiddle을 사용해야합니다! :) – StephenMeehan

관련 문제