2013-06-29 19 views
0

이 질문에 대한 반복을 많이 보았지만 내 문제는 해결하지 못했습니다.jQuery slideDown() slideUp() 두 번의 클릭이 필요합니다.

아래 링크 목록에서 표시 여부를 전환하는 트리거 인 h3을 클릭하면 문제가 발생합니다. 셀렉터와 비헤이비어는 잘 작동하여 숨겨진 항목을 표시하고 다른 항목을 제대로 숨 깁니다. 그러나 헤더를 한 번 클릭하면 토글을 수행하기 위해 두 번 클릭해야합니다. 그것은 작은 성가심이지만 솔루션을 원합니다.

하나의 헤더를 클릭하면 닫으면 위로, 열면 위로 이동하여 각각 .active 클래스를 추가하고 제거합니다. 모두 좋습니다.

다른 머리글을 클릭해도 열린 목록이 숨겨지고 클릭 된 헤더가 열립니다.

첫 번째 헤더에 이전에 열린으로 가면 이전에 열린 상태이지만 닫힌 상태로 한 번 클릭하면 토글이 시작되지 않습니다. 두 번 클릭해야합니다.

간단히 말해서 문제입니다. 페이지 코드에 대한 액세스가 제한되어 있으므로 트래킹 선택의 대부분은 이미 제자리에있는 태그를 사용하여 jQuery에서 수행되어야합니다.

여기에 해당 페이지의 : http://queensvw.com/documents/stackoverflow

가 여기에 jQuery의 :

$(document).ready(function() { 
    function hideAll() { 
    $('#minutes_highlights .date_heading').nextAll('.document_listing').slideUp(); 
    } 

    hideAll(); 

    $('#minutes_highlights .date_heading').click(function() { 
    if ($(this).hasClass('active')) { 
     $(this).removeClass('active'); 
     $(this).nextUntil('hr').slideUp(); 
    } else { 
     $(this).addClass('active'); 
     hideAll(); 
     $(this).nextUntil('hr').slideDown(); 
    } 
    }); 
}); 

가 나는 preventDefault()와 다른 스레드 기반으로 setTimeout()를 추가했습니다. 솔직히 말해서 나는 a에서 행동하지 않기 때문에 왜 그들이 중요 할 지 모르지만 어쨌든 클릭 문제를 해결하지는 못했습니다.

두 번째 클릭을 피하는 방법에 대한 아이디어가 있으십니까?

답변

1

다른 요소를 클릭 할 때 활성 클래스를 제거하지 않기 때문입니다. 지금, 나는 내가 그것을 테스트 할 수 있기 때문에이 작동 인증 할 수없는,하지만 난 그게 당신이 그에게 else 조건을 변경할 수 있습니다 확신 해요 :

else { 
    $('.active').removeClass('active'); 
    $(this).addClass('active'); 
    hideAll(); 
    $(this).nextUntil('hr').slideDown(); 
} 

가 작동합니다.

+0

나는 분명히 놓칠 때 정말 ** 정말 ** 싫어. 자주 있습니다. 신선한 눈을 가져 주셔서 감사합니다; 나는 항상 올바른 방향으로 앞으로 나아갈 수 있습니다. 그랬어. 결정된. 감사! – dashard