This should works not sure about the performance though

$(function() {
        $('p').next('ul').hide(); //hide donation choice children

        $('input[name="donate_by"]').click(function() { //donation
choice radio button click
                                $(this).next().css('font-weight','bold');
                                
$(this).parent().siblings('p').children('label').css('font-
weight','normal');
                                $(this).parent().next().slideDown();
                                
$(this).parent().siblings('p').next('ul').slideUp();

        });
 });

On Aug 5, 10:52 am, Magnificent
<imightbewrongbutidontthin...@gmail.com> wrote:
> Hi all,
>
> I'm trying to do a show/hide on a radio button click and I do have it
> working, but I'd like to make it more...extensible/independent of hard-
> coding children elements to show hide.  My dummy html structure is:
>
> <p><input type="radio" name="donate_by" value="by_cause"
> id="cause"><label for="cause">By Cause:</label></p>
> <ul id="cause_children" class="clearfix">
> <li>Please select cause(s) below:</li>
> <li><input type="checkbox"> Cause 1</li>
> <li><input type="checkbox"> Cause 2</li>
> <li><input type="checkbox"> Cause 3</li>
> </ul>
>
> <p><input type="radio" name="donate_by" value="by_foundation"
> id="foundation"><label for="foundation">By Foundation:</label></p>
> <ul id="foundation_children" class="clearfix">
> <li><input type="checkbox"> Foundation 1</li>
> <li><input type="checkbox"> Foundation 2</li>
> <li><input type="checkbox"> Foundation 3</li>
> </ul>
>
> My jquery code is:
>
> $(function() {
>         $('#cause_children, #foundation_children').hide(); //hide donation
> choice children
>
>         $('input[name="donate_by"]').click(function() { //donation choice
> radio button click
>                 //$(this).next().css('border', '1px solid blue');
>                 //$(this).next().find('ul:first').css('border', '1px solid 
> red');
>                 //$(".donation_children").slideToggle('slow');
>
>                 switch ( $(this).val() ) {
>                         case 'by_cause' : //if by cause, show cause, hide 
> foundation
>                                 $(this).next().css('font-weight', 'bold'); 
> //bold cause
>                                 $('#foundation').next().css('font-weight', 
> 'normal')//unbold
> foundation
>                                 $('#cause_children').slideDown();
>                                 $('#foundation_children').slideUp();
>                                 break;
>                         case 'by_foundation' : //if by foundation, show 
> foundation, hide
> cause
>                                 $(this).next().css('font-weight', 'bold'); 
> //bold foundation
>                                 $('#cause').next().css('font-weight', 
> 'normal')//unbold cause
>                                 $('#cause_children').slideUp();
>                                 $('#foundation_children').slideDown();
>                                 break;
>                 }
>
>         });
>
> });
>
> I left some commented out stuff at the top of the function, hopefully
> to give you an idea of what I tried.  In particular:
>
> $(this).next().find('ul:first').css('border', '1px solid red');
> I was trying to get the first ul (the children to show/hide) on
> "this" (the radio button clicked).
>
> I'd like this to be flexible to where you could add more radio button/
> children and as long as the structure stays the same, the show/hide
> functionality works.

Reply via email to