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