edgarmtze
edgarmtze

Reputation: 25038

How To Show And Hide Input Fields Based On Radio Button Selection

Here is the code to show input fields depending on radio selection like:

SCRIPT

<script type="text/javascript">

function yesnoCheck() {
    if (document.getElementById('yesCheck').checked) {
        document.getElementById('ifYes').style.visibility = 'visible';
    } else {
        document.getElementById('ifYes').style.visibility = 'hidden';
    }

</script>

HTML

Yes
<input type="radio" onclick="javascript:yesnoCheck();" name="yesno" id="yesCheck"/>No
<input type="radio" onclick="javascript:yesnoCheck();" name="yesno" id="noCheck"/>
<br>
<div id="ifYes" style="visibility:hidden">If yes, explain:
    <input type='text' id='yes' name='yes'/>
    <br>What can we do to accommodate you?
        <input type='text' id='acc' name='acc'/>
</div>
   other 3
<input type='text' id='other3' name='other3'>
<br>
    other 4
<input type='text' id='other4' name='other4'>
<br>

However I would like input fields to be hidden (like on the image), and make they do not use any space until radio button is selected, when radio is selected show them with fade effect...

Here is the fiddle:

enter image description here

Upvotes: 42

Views: 395844

Answers (10)

MarcoZen
MarcoZen

Reputation: 1663

2024 Update.

As above but for a BootStrap 5.x environment, the display type should be 'flex' to display/show the div / field.

Here is the Javascript Code ( not inline javascript is not advisble due to potential security issues). I am assuming 2 radio buttons ( NO | YES ) that will hide / show the Input Field ( A Div containing a label and a input field )


// Radio Buttons 1 & 2 ( No and Yes )
const radioNo      = document.getElementById("radiobutton1");    // No
const radioYes     = document.getElementById("radiobutton2");    // Yes

const inputField1 = document.getElementById("fieldShowHide1");

if ( radioNo ){

     // Upon load 
     if( radio1.checked ){ inputField1.style.display = "none";   }   

     // Upon Change
     radioNo.addEventListener("change", event => { 

         // Hide - Removes the element from the page
         if( radioNo.checked ){ inputField1.style.display = "none";   }   

     }); // end of  radioNo.addEventListener

}// end of radioNo

if ( radioYes ){

     // Upon Load 
     if( radioYes.checked ){ inputField1.style.display = "flex";  } 

     // Upon Change
     radioYes.addEventListener("change", event => { 

          // Show - Inserts the element back into the page         
          if( radioYes.checked ){ inputField1.style.display = "flex";  }   
   
     }); // end of  radioYes.addEventListener

} // end of if radioYes

Upvotes: 0

t2fmkh
t2fmkh

Reputation: 97

Just in case anyone wants a solution where only the input field displays when a radio button is selected using pure Javascript, here it is:

function yesnoCheck() {
    yes1 = document.getElementById('yes')
    yes2 = document.getElementById('acc')
    
    no1 = document.getElementById('other3')
    no2 = document.getElementById('other4')
    
    if (document.getElementById('yesCheck').checked) {
        yes1.type = yes2.type = 'text';
        no1.type = no2.type = 'hidden';
    } else {
        no1.type = no2.type = 'text';
        yes1.type = yes2.type = 'hidden';
    }
}
Yes <input type="radio" onclick="yesnoCheck();" name="yesno" id="yesCheck"/>

No <input type="radio" onclick="yesnoCheck();" name="yesno" id="noCheck"/>

<br>

<input type='hidden' id='yes' name='yes' placeholder='If yes, explain:'/>
<input type='hidden' id='acc' name='acc' placeholder='What can we do to accommodate you?'/>

<input type='hidden' id='other3' name='other3' placeholder='other 3'>
<input type='hidden' id='other4' name='other4' placeholder='other 4'>

Upvotes: 1

Zale
Zale

Reputation: 65

Use display:none/block, instead of visibility, and add a margin-top/bottom for the space you want to see ONLY when the inputs are shown

 function yesnoCheck() {
        if (document.getElementById('yesCheck').checked) {
           document.getElementById('ifYes').style.display = 'block';
        } else {
           document.getElementById('ifYes').style.display = 'none';
        }
    }

and your HTML line for the ifYes tag

<div id="ifYes" style="display:none;margin-top:3%;">If yes, explain:

Upvotes: 3

Misael Riojas
Misael Riojas

Reputation: 21

<script type="text/javascript">
function Check() {
    if (document.getElementById('yesCheck').checked) {
        document.getElementById('ifYes').style.display = 'block';
    } 
    else {
        document.getElementById('ifYes').style.display = 'none';

   }
}

</script>
</head>
<body>
Select os :
<br>
Two
<input type="radio" onclick="Check();" value="Two" name="categor`enter code here`y" id="yesCheck"/>One
<input type="radio" onclick="Check();" value="One"name="category"/>
<br>
<div id="ifYes" style="display:none" >
Three<input type="radio" name="win" value="Three"/>
Four<input type="radio" name="win" value="Four"/>

Upvotes: 1

Shubelal Kumar
Shubelal Kumar

Reputation: 81

You can do with Very Simple Step

$(':radio[id=radio1]').change(function() {
   $("#yes").removeClass("none");
   $("#no").addClass("none");


});
$(':radio[id=radio2]').change(function() {
   $("#no").removeClass("none");
   $("#yes").addClass("none");

});

Upvotes: 6

radhika
radhika

Reputation: 121

***This will work.........
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
 window.onload = function() {
    document.getElementById('ifYes').style.display = 'none';
    document.getElementById('ifNo').style.display = 'none';
}
function yesnoCheck() {
    if (document.getElementById('yesCheck').checked) {
        document.getElementById('ifYes').style.display = 'block';
        document.getElementById('ifNo').style.display = 'none';
        document.getElementById('redhat1').style.display = 'none';
        document.getElementById('aix1').style.display = 'none';
    } 
    else if(document.getElementById('noCheck').checked) {
        document.getElementById('ifNo').style.display = 'block';
        document.getElementById('ifYes').style.display = 'none';
        document.getElementById('redhat1').style.display = 'none';
        document.getElementById('aix1').style.display = 'none';
   }
}
function yesnoCheck1() {
   if(document.getElementById('redhat').checked) {
       document.getElementById('redhat1').style.display = 'block';
       document.getElementById('aix1').style.display = 'none';
    }
   if(document.getElementById('aix').checked) {
       document.getElementById('aix1').style.display = 'block';
       document.getElementById('redhat1').style.display = 'none';
    }
}
</script>
</head>
<body>
Select os :<br>
windows
<input type="radio" onclick="javascript:yesnoCheck();" name="yesno" id="yesCheck"/>Unix
<input type="radio" onclick="javascript:yesnoCheck();" name="yesno" id="noCheck"/>
<br>
<div id="ifYes" style="display:none">
Windows 2008<input type="radio" name="win" value="2008"/>
Windows 2012<input type="radio" name="win" value="2012"/>
</div>
<div id="ifNo" style="display:none">
Red Hat<input type="radio" name="unix" onclick="javascript:yesnoCheck1();"value="2008" 

id="redhat"/>
AIX<input type="radio" name="unix" onclick="javascript:yesnoCheck1();"  
value="2012" id="aix"/>
</div>
<div id="redhat1" style="display:none">
Red Hat 6.0<input type="radio" name="redhat" value="2008" id="redhat6.0"/>
Red Hat 6.1<input type="radio" name="redhat" value="2012" id="redhat6.1"/>
</div>
<div id="aix1" style="display:none">
aix 6.0<input type="radio" name="aix" value="2008" id="aix6.0"/>
aix 6.1<input type="radio" name="aix" value="2012" id="aix6.1"/
</div>
</body> 
</html>***

Upvotes: 12

Dolchio
Dolchio

Reputation: 467

Using the visibility property only affects the visibility of the elements on the page; they will still be there in the page layout. To completely remove the elements from the page, use the display property.

display:none // for hiding
display:block // for showing

Make sure to change your css file to use display instead of visibility too.

As for the javascript (this is not jQuery), make sure you hide the options by default when the page loads:

<script type="text/javascript">
    window.onload = function() {
        document.getElementById('ifYes').style.display = 'none';
    }

    function yesnoCheck() {
        if (document.getElementById('yesCheck').checked) {
            document.getElementById('ifYes').style.display = 'block';
        } 
        else {
            document.getElementById('ifYes').style.display = 'none';
        }
    }

</script>

If you haven't done so already, I would recommend taking a look at jQuery. jQuery code is much clearer and easier to write and understand.

http://www.w3schools.com/jquery/default.asp

Upvotes: 1

Carl Vitullo
Carl Vitullo

Reputation: 923

You'll need to also set the height of the element to 0 when it's hidden. I ran into this problem while using jQuery, my solution was to set the height and opacity to 0 when it's hidden, then change height to auto and opacity to 1 when it's un-hidden.

I'd recommend looking at jQuery. It's pretty easy to pick up and will allow you to do things like this a lot more easily.

$('#yesCheck').click(function() {
    $('#ifYes').slideDown();
});
$('#noCheck').click(function() {
    $('#ifYes').slideUp();
});

It's slightly better for performance to change the CSS with jQuery and use CSS3 animations to do the dropdown, but that's also more complex. The example above should work, but I haven't tested it.

Upvotes: 5

Learner
Learner

Reputation: 4004

Replace all instances of visibility style to display

display:none //to hide
display:block //to show

Here's updated jsfiddle: http://jsfiddle.net/QAaHP/16/

You can do it using Mootools or jQuery functions to slide up/down but if you don't need animation effect it's probably too much for what you need.

CSS display is a faster and simpler approach.

Upvotes: 48

pinmonkeyiii
pinmonkeyiii

Reputation: 191

Use display:none to not show the items, then with JQuery you can use fadeIn() and fadeOut() to hide/unhide the elements.

http://www.w3schools.com/jquery/jquery_fade.asp

Upvotes: 1

Related Questions