2011-08-02 5 views
1

아니요, 이것은 곧장 앞으로 전환되는 질문이 아닙니다. 나는 toggle() 함수와 단순히 div를 숨기거나 표시하는 방법을 알고있다. 내부 레이블 상자를 상상해 : 당신이 전체 사업부의 아무 곳이나 클릭하면 수업 hidden를 제거해야jQuery - div 클래스를 클릭시 토글

<div class="section hidden"> 
    <div class="section-legend">My Section</div> 
</div> 

. 상자가 펼쳐집니다. 상자가 클래스 hidden이 아니므로 클릭 할 수 없습니다.

대신 을 클릭하면 hidden 클래스를 주 div에 다시 추가해야합니다. 분명히 범례의 click 이벤트는 stopPropagation()을 필요로합니다. 이제 범례를 더 이상 클릭 할 수 없어야하며 다시 한번 전체 div를 클릭하여 열어야합니다.

내가 제대로 작동하려면 아무것도 얻을 수 없다, 나는이 바보 같은 코드를 알고 :

$(document).ready(function() { 

    $('.section.hidden').click(function() { 
     $(this).removeClass('hidden'); 
     $(this).find('.section-legend').click(function(e) { 
      $(this).parent().addClass('hidden'); 
      e.stopPropagation(); 
     }); 
    }); 

    $('.section-legend').click(function(e) { 
     $(this).parent().addClass('hidden'); 
     e.stopPropagation(); 
     $(this).parent().click(function() { 
      $(this).removeClass('hidden'); 
     }); 
    }); 

});

+0

사람들은 항상 원하는과 게으른 받고있는 HTML이 자바 스크립트를 추가 jsfiddle .. – Ben

+0

div.hidden 여전히 어떻게 든 볼 수 있습니까? 나는 그것이 정말로 '숨겨져 있다면'클릭 할 수있는 방법이 무엇인지 확신 할 수 없다. – Ben

+0

숨겨진 것이 아니라 숨겨진 섹션의 클래스 이름이다. 더 많은 의미가 있다는 것을 의미하는 몇 가지 다른 코드가 있습니다.하지만 여기서는 어떻게 혼란스럽게 보일 수 있습니다. – BadHorsie

답변

1
$('.section-legend').live('click',function(){ 
    $(this).parent().toggleClass('hidden'); 
}); 

이것은 섹션 - 범례가 '숨겨진 상태'의 컨테이너와 동일하다고 가정합니다.

편집이 : 몇 가지 코드를 변경, 해결책은 이것이다 :

$('.section').live('click',function(){ 
    $(this).removeClass('hidden'); 
}); 
$('.section-legend').live('click',function(){ 
    $(this).parent().toggleClass('hidden'); return false; 
}); 

return false 트릭을했다! 데모 : http://jsfiddle.net/RUfN7/2/

+0

아니요,'section-legend'는 전체 컨테이너를 채우지 않습니다. 이것이 문제입니다. 큰 상자 내부의 레이블로 상자를 확장하면 상자 상단으로 이동합니다 (즉, 클래스 '숨김'없음). – BadHorsie

+0

괜찮아, 내 업데이 트가 수정해야합니다, jsfiddle 데모를 참조 – Willem

+0

군장, 감사합니다. – BadHorsie

1

먼저 클릭 필요가 사업부에 onclick 이벤트 추가 :

<div id="myDiv" class="section hidden"> 
    <div class="section-legend" onclick="function1();">My Section</div> 
</div> 

을 그리고

<script language="JavaScript"> 
    function function1(){ 
     document.getElementById("myDiv").removeAttribute("class"); 

    } 
</script> 
+1

죄송합니다.이 코드는/또는 jQuery가 아닙니다. – BadHorsie

1
$('.section').click(function() { 
    $(this).removeClass('hidden'); 
}); 

$('.section-legend').click(function(e) { 
    var $parent = $(this).parent(); 
    if(!$parent.hasClass('hidden')) { 
     $parent.addClass('hidden'); 
     return false; 
    } 
});