I am trying to use a jquery function to hide/show certain form elements when a check box is checked. The same function should also be used to hide/show form elements when a radio button is checked. The problem is with the radio buttons. My function can't tell when a radio button is unchecked so that the div that became visible when it was checked can now be hidden since it is unchecked. I have shown the code below:
<!-- html on one of the pages -->
<fieldset>
<label for="viaMail">Send offers to my mail</label>
<input type="checkbox" id="viaMail" class="slide" autocomplete="off">
<label for="viaEmail">Send offers to my email address</label>
<input type="checkbox" id="viaEmail" autocomplete="off">
</fieldset>
<div class="viaMail"> <!-- div hidden with css using display: none rule -->
<!-- input fields for mailing addresses etc -->
</div>
<!-- end page one html -->
<!-- html on page two -->
<fieldset>
<label for="viaMail">Send offers to my mail</label>
<input type="radio" name="group1" id="viaMail" class="slide" autocomplete="off">
<label for="viaEmail">Send offers to my email address</label>
<input type="radio" name="group1" id="viaEmail" autocomplete="off">
</fieldset>
<div class="viaMail"> <!-- div hidden with css using display: none rule -->
<!-- input fields for mailing addresses etc -->
</div>
/* the js function */
ShowHideDiv={
init:function(){
var radcheck = $(".slide");
//if the input element has the class 'slide' then the value of it's 'id' attribute
//is retrieved and the class which has the same name as the 'id' of the current input
//element is hidden or slided into view - in this case the 'viaMail' class
radcheck.on("change",function(){
if($(this).prop('checked')== true) {
$('body').find("."+$(this).attr('id')).slideDown('slow');
}
else {
$('body').find("."+$(this).attr('id')).slideUp('fast');
}
});
}
}
I've tried the function for the checkboxes and it works fine. It doesn't work for the radio buttons - the div is 'slided down' into view but it doesn't disappear by 'slideUp' when the other radio button is selected. Would really appreciate your help.
Answer: Use the jQuery prop() method You can use the jQuery prop() method to check or uncheck radio button dynamically such as on click of button or an hyperlink etc. The prop() method require jQuery 1.6 and above.
Using Input Radio checked property: The Input Radio checked property is used to return the checked status of an Input Radio Button. Use document. getElementById('id'). checked method to check whether the element with selected id is check or not.
To select a radio button (Male). The radio button is 0-based, so the 'Male' = '0', 'Female' = '1' and 'Unknown' = '2'. $('input:radio[name=sex]:nth(0)'). attr('checked',true); or $('input:radio[name=sex]')[0].
it should be like below
if( $(this).prop('checked', true) )
You could use .is()
to check for something like this.
if( $(this).is(':checked') )
More about it in the documentation.
Also, you could replace $('body').find("."+$(this).attr('id'))
with just $("." + $(this).attr('id'))
.
Demo here
$(function () {
$('.slide').on("change", function () {
if ($(this).is(':checked')) {
$("." + $(this).attr('id')).slideDown('slow');
} else {
$("." + $(this).attr('id')).slideUp('fast');
}
});
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With