2010-09-10 3 views
10

Tenir compte the following code:Quelle est la différence entre cliquer sur une case à cocher et appeler sa fonction '.click()'?

HTML:

<input type='checkbox' /> 
<div>Click here</div> 

JS:

$(function() { 
    $('input').click(function() { 
     document.write($(this).is(':checked') ? "checked" : "unckecked"); 
    }); 
    $('div').click(function() { 
     $('input').click(); 
    }); 
}); 

Lorsque la case est cliqué, la sortie est checked, mais si "Cliquez ici" est cliquée la sortie est unckecked . Pourquoi donc?

+0

Je me rends compte que vous donnez probablement juste un exemple ici, mais si vous voulez que quelque chose comme ceci fonctionne, vous devriez utiliser la balise label à la place. [Demo] (http://jsfiddle.net/YfJTF/1/) – irishbuzz

+0

@Tom - Ce n'est pas correct, 'cela 'se réfère toujours à l'entrée, vous pouvez le tester ici: http://jsfiddle.net/nick_craver/ c8Ucr/1/ –

Répondre

12

Parce que l'événement click est différent de l'événement change, où l'élément change. Lorsque le <div>.click() déclenche l'événement click qui n'a pas encore changé l'état de la case à cocher alors quand il le vérifie, il est dans l'état précédent.

Lorsque vous cliquez sur directement sur le <input>, vous avez déjà changé l'état, même si la 2ème commande événement se déclenche change, le point principal est les cases checked statut a changé, avant le gestionnaire click est vérifier pour cela, donc l'état est actuel.

Si vous voulez des informations d'état précis chercher et déclencher l'événement change au lieu, comme ceci:

$(function() { 
    $('input').change(function() { 
     $("span").append("<br />" + (this.checked ? "Checked" : "Uncecked")); 
    }); 
    $('div').click(function() { 
     $('input').click().change(); 
    }); 
}); 

You can give it a try here, sur tout hasard ce n'est pas une question de comportement et vous êtes désireux d'un externe zone cliquable, this is how I'd do it (via un <label> enveloppant l'entrée).

+0

vous avez probablement raison. J'ai mal compris car au lieu de réparer sa démo brisée, je viens de répondre à la question de savoir comment je l'interprète: -P +1. –

+0

Merci beaucoup, Nick! –

+0

@Misha - Bienvenue, @Andy - Merci :) Je pense que le vôtre est un bon addenda à la question pour les autres qui le trouvent, à la recherche de cette route ... Undelete et vous obtiendrez un +1 de moi au moins. –

Questions connexes