2010-11-26 7 views
4

J'ai un code comme celui-ci pour activer ou désactiver certaines entrées de texte lorsqu'une case est cochée.Quel événement jquery utiliser?

$(document).ready(function(){ 
    $(":checkbox").change(function(){ 
     if(this.checked){ 
      $("input:text").attr('disabled', true); 
     } else { 
      $("input:text").attr('disabled', false); 
     } 
     }); 
}); 

Il semble fonctionner lorsque l'utilisateur clique sur la case à cocher, mais le javascript peut changer la valeur de case à cocher en invoquant:

$(":checkbox").attr('checked', true); 

Lorsque la case à cocher est modifiée par le javascript l'événement ne se déclenche pas . J'ai essayé avec l'événement de clic() mais arrive la même chose.

Une idée?

Merci.

Répondre

1

appeler manuellement l'événement change:

$(":checkbox").change(); 
1

Désolé si je suis trop simpliste, mais ne peut pas vous laisser le JavaScript appeler l'événement manuellement chaque fois qu'il change la valeur de case à cocher?

1

Vous pouvez essayer de déclencher l'événement manuellement:

$(":checkbox").attr('checked', true); 
$(":checkbox").change(); 

ou

$(":checkbox").attr('checked', true).change(); 
0

Je ne sais pas pourquoi changer la case à cocher par javascript ne se déclenche pas l'événement. Mais, j'ai une solution pour cela.

faire

function(){ 
     if(this.checked){ 
      $("input:text").attr('disabled', true); 
     } else { 
      $("input:text").attr('disabled', false); 
     } 
     } 

en fonction. Comme la fonction cb_change_handler() {...} et vous pouvez utiliser manuellement cette fonction lorsque vous modifiez la valeur par javascript.

1

Vous pouvez juste .trigger() le change event manuellement:

$('input:checkbox').trigger('change'); 

Vous ne devez jamais utiliser un sélecteur comme :checkbox. C'est une utilisation implicite du sélecteur universel * qui va interroger tous les nœuds sur votre site, ce qui est plutôt mauvais, ce qui signifie que c'est assez lent.

va toujours interroger tous vos éléments de case à cocher, vous devez nous class ou id pour demander un élément spécifique.

Réf.: .trigger()

4

Tout d'abord, perdre du poids que les gestionnaires d'événements, puisque vous passez un booléen à .attr('disabled', bool) et .checked est un booléen, Profitons de, comme ceci:

$(function(){ 
    $(":checkbox").change(function(){ 
    $("input:text").attr('disabled', this.checked); 
    }); 
}); 

Puis lors du changement de valeur programme déclenche juste l'événement change aussi bien, comme ceci:

$(":checkbox").attr('checked', true).change(); 

.change() sans paramètres est un raccourci pour .trigger("change"), qui fera de votre gestionnaire d'événements courir.