Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Monitoring when a radio button is unchecked

I have an application that shows one div when a certain radio button is selected and then hides that div when the radio button is unselected. The problem is that the change event attached to the radio button only gets called when the radio button is checked, not when another one is checked (unchecking the previous one). My current code is as follows:

<form name="newreport" action="#buildurl('report.filters')#" method="post">     <dl class="oneColumn">         <dt class="first"><label for="txt_name">Name</label></dt>         <dd><input type="text" name="name" id="txt_name" class="text" /></dd>         <dt><strong>Type</strong></dt>         <dt><input type="radio" name="type" id="rdo_list" value="list" checked="checked" /><label for="rdo_type" style="display:inline;">List</label></dt>         <dd>List a group of records</dd>         <dt><input type="radio" name="type" id="rdo_fields" value="fields" /><label for="rdo_fields" style="display:inline;">Field Breakdown</label></dt>         <dd>Breaks down distinct field values for comparison</dd>         <dt><input type="radio" name="type" id="rdo_history" value="history" /><label for="rdo_history" style="display:inline;">Historical Comparison</label></dt>         <dd>Provides record changes over a group of years for growth comparisons</dd>         <dt><input type="radio" name="type" id="rdo_breakdown" value="breakdown" /><label for="rdo_breakdown" style="display:inline;">Student Breakdown</label></dt>         <dd>Breaks down students by school, district or grade</dd>         <div class="reportyear">             <dt><label for="txt_year">Year to Report</label></dt>             <dd><input type="text" name="year" id="txt_year" class="text" value="#year(Rc.yearstart)#" /></dd>         </div>         <div class="date-spans" style="display:none;">             <dt><label for="txt_yearstart">Year Start</label></dt>             <dd><input type="text" name="yearstart" id="txt_yearstart" class="text" value="#evaluate(year(Rc.yearstart)-5)#" /></dd>             <dt><label for="txt_yearend">Year End</label></dt>             <dd><input type="text" name="yearend" id="txt_yearend" class="text" value="#year(Rc.yearstart)#" /></dd>         </div>     </dl> </form>   <script type="text/javascript">     $(function(){         $('##rdo_history').change(function(e){             var isChecked = $(this).attr(checked);             var $datespan = $('form .date-spans');             var $year = $('form .reportyear');              if(isChecked){                 $year.css({display:'none'});                 $datespan.fadeIn('fast');             }else{                 $datespan.css({display:'none'});                 $year.fadeIn('fast');             }         });     }); </script> 

It seems like a pretty simple script, but the event only gets called on the check event, not on the uncheck event. Can anyone tell me why?

like image 610
Dave Long Avatar asked Apr 28 '11 20:04

Dave Long


People also ask

How can I tell if a radio button is unchecked?

To find the selected radio button, you follow these steps: Select all radio buttons by using a DOM method such as querySelectorAll() method. Get the checked property of the radio button. If the checked property is true , the radio button is checked; otherwise, it is unchecked.


1 Answers

Handle the change event on the radio group, not each button. Then look to see which one is checked.

Here's is some untested code that hopefully shows what I'm talking about :)...

$("input[name='type']").change(function(e){     if($(this).val() == 'history') {         $year.css({display:'none'});         $datespan.fadeIn('fast');     } else {         $datespan.css({display:'none'});         $year.fadeIn('fast');     }  }); 
like image 190
Brian Avatar answered Oct 05 '22 17:10

Brian