2010-08-16 6 views
2
$('document').ready(function(){ 
     $('[name=mycheckbox]').live('click', function(){ 
      if($(this).is(':checked')) 
      { 
       alert('it is checked'); 
      } 
      else 
      { 
       alert('it is not checked'); 
      } 
     }); 

     $('[name=mycheckbox]').click(); 
    }); 

Si la case est cochée et vous cliquez dessus, la zone d'alerte dit, « il n'est pas cochée », mais quand la page se exécute et l'événement click est tiré (avec la case à cocher cochée), la case d'alerte indique "c'est vérifié". Pourquoi? L'état de la case à cocher n'est-il pas affecté par l'événement click? Est-ce que c'est mousedown qui change l'état?Question concernant la fonction click() jQuery

Répondre

3

Au lieu de click vous devez utiliser l'événement change ici, comme ceci:

$('[name=mycheckbox]').live('change', function(){ 

Et l'invoquer avec le même déclencheur, comme celui-ci:

$('[name=mycheckbox]').change(); 

Le click est séparé du change , si vous voulez que l'événement se déclenche lorsque le chèque a effectivement terminé changeant, alors vous voulez change, pas click. Alternativement, si vous voulez l'activer à partir de son état initial encore, faites ceci:

$('[name=mycheckbox]').click().change(); 
0

Au lieu de l'événement en direct (que j'ai trouvé buggy au mieux) essayer la liaison d'un clic normal, même à la place. Je l'ai fait quelque chose de similaire qui fonctionne très bien avec un événement .cliquez pas .live (« clic »,

J'espère que cela: S

+0

Ce n'est pas du tout le problème. sur une case à cocher, le clic se produit avant le changement. – Jamiec

+0

@Jamiec - Qu'en est-il de son problème avec 'live()'. Est-ce que 'live()' est vraiment bogué (mis à part la question principale)? – orokusaki

+0

Pour moi jamiec, ça marche bien, donc je ne pense pas que ce soit le cas. – Dorjan

0

Ce qui se passe est assez subtile

J'ai. bouton et case à cocher liées au code suivant:

$("#chkbx").click(function() { 

    if ($(this).is(':checked')) { 
     alert('checked'); 
    } 
    else { 
     alert('unchecked'); 
    } 
}); 

$("#MyButton").click(function() { 

    $("#chkbx").click(); 
}); 

Lorsque je clique sur la case à cocher, tout est affiché comme

vous attendez Lorsque je clique sur le. bouton, l'inverse est vrai. Qu'est-ce qui se passe, c'est que lorsque vous cliquez sur la case à cocher, il déclenche l'événement click par défaut avant d'exécuter votre code, et donc le code prend le statut à la suite de l'événement de clic par défaut. Lorsque vous appelez la méthode click directement sur l'élément, il appelle réellement votre fonction click, puis exécute l'événement par défaut.

Je ne suis pas ce que ça devrait être. ou si c'est intentionnel, ou un bug.