Reputation: 17
I have a radio field in my form that has 3 elements. color, sleeve, size
based on the radio selection I do a show/hide of 3 select boxes. select- color-type red, blue, green etc, etc select - sleeve-type full sleeve, half sleeve, sleeveless select - size-type small, medium, large, extra large how can I make the select field mandatory if one of the related radio is selected example: if color radio is selected then drop-down color-type is a required field, else if, radio sleeve is selected then drop-down sleeve-type is selected and so on.
<script type="text/javascript">
function showLayer(layerName)
{
document.getElementById(layerName).style.display="block";
}
function hideLayer(layerName)
{
document.getElementById(layerName).style.display="none";
}
</script>
<form method="post" action="" name="rregister" id="rregister">
<div>
<label><input type="radio" name="ctype" id="color" value="color" onclick="showLayer('hlayer1'); hideLayer('hlayer2'); hideLayer('hlayer3');" required>Color</label>
<label><input type="radio" name="ctype" id="sleeve" value="sleeve" onclick="showLayer('hlayer2'); hideLayer('hlayer1'); hideLayer('hlayer3');">Sleeve</label>
<label><input type="radio" name="ctype" id="size" value="size" onclick="showLayer('hlayer3'); hideLayer('hlayer2'); hideLayer('hlayer1');">Size</label>
</div>
<div id="hlayer1" style="display: none;">
<select id="colortype" name="colortype">
<option value="" selected="selected">Color</option>
<option value="red">red</option>
<option value="blue">blue</option>
<option value="green">green</option>
<option value="yellow">yellow</option>
</select>
</div>
<div id="hlayer2" style="display: none;">
<select id="sleevetype" name="sleevetype">
<option value="" selected="selected">Sleeve </option>
<option value="Half">Half</option>
<option value="Full">Full</option>
<option value="Sleeveless">Sleeveless</option>
</select>
</div>
<div id="hlayer3" style="display: none;">
<select id="sizetype" name="sizetype">
<option value="" selected="selected">Size</option>
<option value="S">Small</option>
<option value="M">Medium</option>
<option value="L">Large</option>
<option value="XL">Xtra Large</option>
</select>
</div>
<div>
<input type="submit" name="submit" id="submit" value="Submit" />
</div>
</form>
Upvotes: 0
Views: 179
Reputation: 870
There are a few ways to accomplish this. You can get the immediate child of the div you are setting the style.display
attribute and set that child as required. At the moment the first child is your select
input, keep in mind this may cause trouble in the future if you decide to add more elements.
If you want a more robust way to go around I would add another parameter to your showLayer()
and hideLayer()
functions representing the ID of the select field you want to make required and get these elements directly.
Working Example:
function showLayer(layerName, myField)
{
document.getElementById(layerName).style.display="block";
//set the appropriate field as required
document.getElementById(myField).required = true;
}
function hideLayer(layerName, myField)
{
document.getElementById(layerName).style.display="none";
//set fields as not required
document.getElementById(myField).required = false;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
</head>
<body>
<form method="post" action="" name="rregister" id="rregister">
<div>
<label><input type="radio" name="ctype" id="color" value="color" onclick="showLayer('hlayer1', 'colortype'); hideLayer('hlayer2', 'sleevetype'); hideLayer('hlayer3', 'sizetype');">Color</label>
<label><input type="radio" name="ctype" id="sleeve" value="sleeve" onclick="showLayer('hlayer2', 'sleevetype'); hideLayer('hlayer1', 'colortype'); hideLayer('hlayer3', 'sizetype');">Sleeve</label>
<label><input type="radio" name="ctype" id="size" value="size" onclick="showLayer('hlayer3', 'sizetype'); hideLayer('hlayer2', 'sleevetype'); hideLayer('hlayer1', 'colortype');">Size</label>
</div>
<div id="hlayer1" style="display: none;">
<select id="colortype" name="colortype">
<option value="" selected="selected">Color</option>
<option value="red">red</option>
<option value="blue">blue</option>
<option value="green">green</option>
<option value="yellow">yellow</option>
</select>
</div>
<div id="hlayer2" style="display: none;">
<select id="sleevetype" name="sleevetype">
<option value="" selected="selected">Sleeve </option>
<option value="Half">Half</option>
<option value="Full">Full</option>
<option value="Sleeveless">Sleeveless</option>
</select>
</div>
<div id="hlayer3" style="display: none;">
<select id="sizetype" name="sizetype">
<option value="" selected="selected">Size</option>
<option value="S">Small</option>
<option value="M">Medium</option>
<option value="L">Large</option>
<option value="XL">Xtra Large</option>
</select>
</div>
<div>
<input type="submit" name="submit" id="submit" value="Submit" />
</div>
</form>
</body>
</html>
Notice that I added the appropriate input ID as arguments in your HTML
Upvotes: 0