¿Por qué no se activa mi evento de cambio de checkbox?

Tengo dos funciones.

La primera función traduce un clic div en un alternador marcado / desmarcado. La segunda función traduce un cambio de checkbox en un evento hide / show.

El problema es que cuando uso la primera función para marcar / desmarcar el cuadro, no se llama a la segunda función. Soy nuevo en javascript, gracias.

 $(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; } }); });   $(document).ready(function() { $(":checkbox").change(function() { if($(this).attr("checked")) { $('.'+this.id).show(); } else { $('.'+this.id).hide(); } }); });  

El evento de cambio no se activa cuando se cambia el valor de una checkbox mediante progtwigción. Lo que puede hacer para asegurarse de que se active es:

  $(":checkbox").parent().click(function(evt) { if (evt.target.type !== 'checkbox') { var $checkbox = $(":checkbox", this); $checkbox.attr('checked', !$checkbox.attr('checked')); $checkbox.change(); } }); 

No te molestes con el primer fragmento. Solo use elementos LABEL:

  

Ahora, cuando el usuario haga clic en la etiqueta (el texto al lado de la checkbox), la checkbox se activará.


El segundo fragmento se puede optimizar:

 $('input:checkbox').change(function() { $('#' + this.id).toggle(this.checked); }); 

estás usando '.' que es para selectores de clase, en su lugar use '#' ya que está usando la ID del elemento. Me gusta esto:

 $(document).ready(function() { $(":checkbox").bind('change', function() { if($(this).attr("checked")) { $('#'+this.id).show(); } else { $('#'+this.id).hide(); } }); });