2009-11-26 18 views
8

मैं अपने लेबल पर क्लिक करने के बाद अपनी सामग्री को दिखाने/छिपाने के विकल्प के साथ कुछ फ़ील्ड को बढ़ाने के लिए चाहता हूं।jQuery लचीला छुपा/फ़ील्ड का शो

वर्तमान में, एचटीएमएल इस तरह दिखता है:

<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 के क्लिक किया कथा चालू किए जाने की जानी चाहिए।

मैं इस उपयोग करने की कोशिश:

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

लेकिन यह कुछ भी (यहां तक ​​कि पहली जगह में सामग्री छिपा नहीं) नहीं करता है। निस्संदेह मैं केवल उस फ़ील्ड पर दृश्य को टॉगल करना चाहता हूं जिसे उपयोगकर्ता ने क्लिक किया है, इसलिए इसे किसी भी तरह से निर्धारित करना होगा कि कौन सा किंवदंती क्लिक किया गया था और फिर संबंधित फ़ील्ड की सामग्री को छुपाएं।

निश्चित रूप से, मैं उन्हें सभी आईडी दे सकता हूं और प्रत्येक फ़ील्ड के लिए कोड लिख सकता हूं, लेकिन यह अपेक्षाकृत अनावश्यक है कि यह हमेशा एक जैसा होगा, मुझे लगता है कि इस कार्यक्षमता को किसी भी क्षेत्र के लिए सार्वभौमिक बनाने का एक तरीका होना चाहिए। ..

किसी के पास एक साफ विचार है?

उत्तर

11

अगर मैं तुम्हें था मैं उस तरह div में fieldset की सामग्री लपेट चाहते हैं, और यह करने के लिए: जब आप लेबल पर क्लिक

<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

हाँ, अच्छी तरह से:

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

जावास्क्रिप्ट (jQuery की आवश्यकता है) और यह काम करेगा, फिर भी यह एक हैक है और HTML को संपादित करने की आवश्यकता है: -/फिर भी, धन्यवाद। –

+2

यह एक हैक कैसे कर रहा है? ... आपने यह निर्दिष्ट नहीं किया है कि आप HTML को संशोधित नहीं करना चाहते थे। – Mottie

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

यह काम करता है। यह वही अवधारणा है, वास्तव में उलटा।

+0

मैंने अपनी सामग्री को एक div में लपेट लिया और इस विधि को बुलाया - ठीक काम करता है – RozzA

+0

अच्छी तरह से काम करता है। लोड को कैसे बंद करें? – Dudeist

+0

यदि मैं आपको सही ढंग से समझता हूं तो आप प्रदर्शन को सेट करके सीएसएस के साथ ऐसा कर सकते हैं: none; जो भी तत्व आप चाहते हैं उसे "बंद" ऑनलोड पर। – creativetim

3

विस्तारित संस्करण

एचटीएमएल (कथा में शामिल है [-] अवधि): एक ही रास्ता निश्चित रूप से यह करने के लिए thats

$(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

"फ़ील्ड टॉगल द्वारा किंवदंती" के लिए googling के दौरान 3 SO उत्तर हैं और आपका सबसे आसान + बोनस दौर +/- चीज़ था। धन्यवाद और +1। –

संबंधित मुद्दे