2009-11-26 2 views
8

레이블을 클릭 할 때 내용을 표시하거나 숨길 수있는 옵션으로 일부 필드 세트를 향상시키고 싶습니다.jQuery 유연한 필드 세트 숨기기/표시

현재, HTML은 다음과 같습니다

<fieldset> 
    <legend>Fieldset 1</legend> 
    <!-- Some input, p, div, whatever --> 
</fieldset> 
<fieldset> 
    <legend>Fieldset 2</legend> 
    <!-- Some input, p, div, whatever --> 
</fieldset> 

그래서, 하나 fieldset legend의 클릭에, 부모 필드 셋의 클릭 전설 아무것도하지만,이 전환되어야한다.

$("fieldset *:not(legend)").hide(); 
$("fieldset legend").click(function(){ 
    $(this).nextAll().slideToggle(); 
}); 

을하지만 아무것도 (심지어 첫번째 장소에있는 내용을 숨기지)하지 않습니다

나는 이것을 사용했습니다. 물론 사용자가 클릭 한 바로 그 필드 세트에 대한보기 만 토글하고 싶기 때문에 어떤 범례가 클릭되었는지 확인한 다음 해당 필드 세트의 내용을 숨겨야합니다.

물론, 나는 모든 ID를주고 모든 필드 세트에 대한 코드를 작성할 수 있지만, 항상 똑같을 것이라고 생각하면 필드 세트의 모든 양에 대해이 기능을 보편적으로 만드는 방법이 있어야한다고 생각합니다. ..

누구나 깔끔한 아이디어가 있습니까? 내가 당신이라면

답변

11

나는 그런 식으로 사업부에서 필드 셋의 내용을 포장하고 줄 :

<script type="text/javascript"> 
     $(function(){ 
      $('legend').click(function(){ 
       $(this).parent().find('.content').slideToggle("slow"); 
      }); 
     }); 
</script> 

<fieldset> 
    <legend>Fieldset 1</legend> 
    <!-- Some input, p, div, whatever --> 
    <div class="content"> 
     this<br /> 
     is<br /> 
     content<br /> 
    </div> 
</fieldset> 
<fieldset> 
    <legend>Fieldset 2</legend> 
    <!-- Some input, p, div, whatever --> 
    <div class="content"> 
     this<br /> 
     is<br /> 
     content<br /> 
    </div> 
</fieldset> 

을 이제 당신이 라벨을 클릭 할 때 위/아래의 내용을 밀어 떠날 것이다 레이블을 볼 수 있습니다.

+0

그래, 한 가지 방법은 물론 그것을 할 먹으 렴 그리고 그것은 작동 할 것이다, 아직도 해킹이고 HTML을 편집 할 것을 요구한다 : - 그래도 고마워. –

+2

어떻게이 작업을 해킹하고 있습니까? ... HTML을 수정하고 싶지 않았다고 지정하지 않았습니다. – Mottie

10
$(function(){ 
    $('legend').click(function(){ 
    $(this).siblings().slideToggle("slow"); 
    }); 
}); 

이것은 작동합니다. 정말 같은 개념입니다.

+0

div에서 내 콘텐츠를 래핑하고이 메서드를 호출했습니다. 제대로 작동하는 것 같습니다. – RozzA

+0

이 잘 작동합니다. 짐을 닫는 방법은? – Dudeist

+0

올바르게 이해한다면 display : none을 설정하여 CSS로 할 수 있습니다. on 요소를 "닫은"요소로 바꾸십시오. – creativetim

3

확장 버전

HTML (전설 포함 [-] 스팬) :

<fieldset> 
    <legend>My Area <span>[-]</span></legend> 
    Content of fieldset... 
</fieldset> 

자바 스크립트 (jQuery를 필요) :

$(function(){ 
    // Set cursor to pointer and add click function 
    $("legend").css("cursor","pointer").click(function(){ 
     var legend = $(this); 
     var value = $(this).children("span").html(); 
     if(value=="[-]") 
      value="[+]"; 
     else 
      value="[-]"; 
     $(this).siblings().slideToggle("slow", function() { legend.children("span").html(value); }); 
    }); 
}); 
+0

"fieldset toggle by legend"로 인터넷 검색을 할 때 3 가지의 대답이 있습니다. 가장 간단한 것은 + 보너스 라운드입니다. 감사 & +1. –