Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why isn't my checkbox change event triggered?

Tags:

I have two functions.

The first function translates a div click into a checked/unchecked toggle. The second function translates a checkbox change into a hide/show event.

The problem is that when I use the first function to check/uncheck the box, the second function is not called. I am new to javascript, thanks.

<script type="text/javascript"> $(document).ready(function() {     $(":checkbox").parent().click(function(evt) {         if (evt.target.type !== 'checkbox') {             var $checkbox = $(":checkbox", this);             $checkbox.attr('checked', !$checkbox.attr('checked'));             evt.stopPropagation();             return false;         }     }); }); </script>  <script type="text/javascript"> $(document).ready(function() {     $(":checkbox").change(function() {         if($(this).attr("checked")) {             $('.'+this.id).show();         }         else {             $('.'+this.id).hide();         }     }); }); </script> 
like image 471
sxv Avatar asked Feb 02 '11 01:02

sxv


2 Answers

The change event does not fire when you programmatically change the value of a check box. What you can do to ensure it fires is:

 $(":checkbox").parent().click(function(evt) {     if (evt.target.type !== 'checkbox') {         var $checkbox = $(":checkbox", this);         $checkbox.attr('checked', !$checkbox.attr('checked'));         $checkbox.change();     } }); 
like image 109
Matthew Manela Avatar answered Sep 25 '22 03:09

Matthew Manela


Don't bother with the first snippet. Just use LABEL elements:

<label><input type="checkbox">Some option</label> 

Now, when the user clicks the label (the text next to the checkbox), the checkbox will be activated.


The second snippet can be optimized:

$('input:checkbox').change(function() {     $('#' + this.id).toggle(this.checked); }); 
like image 21
Šime Vidas Avatar answered Sep 24 '22 03:09

Šime Vidas