Le déclencheur jQuery ('clic') ne déclenche pas l'événement .click sur la case à cocher
J'ai une table avec une check-toutes les case dans l'en-tête qui vérifie toutes les cases à cocher dans la colonne de la table:
<input class="check-all" type="checkbox" id="masterCheck" />
Cependant, sur une de mes pages que je voudrais vérifier automatiquement la case la case tout au chargement de la page.
Pour ce faire, j'ai tenté de déclencher un trigger('click') de la fonction comme celle ci-dessous:
$(document).ready(function () {
if ($("#masterCheck").attr('checked')) {
} else {
$("#masterCheck").trigger('click');
}
});
Ce vérifie la case amende, mais ne mettent pas le feu à mon habitude cliquez sur l'événement pour les cases à cocher avec la classe .vérifiez-les tous (ci-dessous):
$(function () {
$('.check-all').click(function () {
$(this).parents('table:eq(0)').find(':checkbox').attr('checked', this.checked);
});
});
J'ai aussi essayé d'ajouter un Javascript setTimeout, pensant que la coutume cliquez sur la fonction n'était pas en cours de chargement tout à fait encore, mais il n'a toujours pas le feu à la coutume cliquez sur la fonction après une attente de 1, 2, et 3 secondes.
Lors du chargement de la page, je peux vérifier mon pré-coché la case et re-vérifier pour vérifier toutes les cases à cocher dans la colonne parfaitement.
Dois-je ajouter quelque chose de spécial pour mon jQuery sur le Document.prêt pour lui permettre de feu la coutume cliquez sur l'événement?
***EDIT1:
Ok, j'ai tenté d'ajouter de la coutume événement click droit au-dessus du document.prêt de la fonction sur ma page pour vous assurer qu'il est chargé (comme la précédente personnalisé événement click est un maître .fichier js utilisé dans mon _Layout). En plus de cela, j'ai modifié la classe de ma case, afin de correspondre avec mon personnalisée, cliquez sur l'événement, donc je n'entrent pas en conflit avec celui de mon maître .fichier js.
<input class="check-allx" type="checkbox" id="masterCheck" />
//Check all checkboxes when the one in a table head is checked:
$(function () {
$('.check-allx').click(function () {
$(this).parents('table:eq(0)').find(':checkbox').attr('checked', this.checked);
alert(this);
});
});
//Check for unchecked masterCheck
$(document).ready(function () {
if ($("#masterCheck").attr('checked')) {
} else {
//$("#masterCheck").trigger('click');
$("#masterCheck").click();
}
});
Ce qui semble jeter mon alerte au sein de l'personnalisé, cliquez sur l'événement qui est un progrès, mais en vain, toutes mes cases à cocher vérifier comme il se doit. Note: j'ai aussi changé le trigger('click') à la une .cliquez sur(), qui à la fois faire la même chose dans ma situation.
source d'informationauteur Lando
Vous devez vous connecter pour publier un commentaire.
Mise à jour: Cela s'applique uniquement à jQuery 1.8 et ci-dessous. C'était fixe en jQuery 1.9.
Le problème est que manuellement appeler
click()
en jQuery fonctionne différemment que d'une réelle cliquez sur.Lorsque vous cliquez sur, d'abord la case à cocher état est modifié, puis de cliquer sur le gestionnaire est appelé.
Lorsque vous appelez
click()
d'abord cliquez sur le gestionnaire est appelé, puis la case à cocher état est changé.Ainsi, lorsque vous appelez
click
dans votre gestionnaire de clic,this.checked
est toujours en cours d'être faux. Vous pouvez résoudre ce problème en faisant unchange
gestionnaire au lieu d'unclick
gestionnaire, comme ceci:Voir En jQuery, pourquoi ne par programmation le déclenchement de 'click()' sur une case à cocher pas de vérifier immédiatement? pour une explication complète de la différence entre le montant réel des clics manuels et jquery déclenché clics.
Exemple:
Ci-dessous sera exécuté après la case changement d'état.
Paramètre de l'attribut checked par programme ne donne pas lieu à un correspondant, cliquez sur l'événement, alors vous devez ajouter votre propre
.trigger('click')
lorsque vous définissez l'attribut.Bien, considérant que je n'avais besoin que de la fonctionnalité sur cette page, j'ai opté pour la solution de facilité et éviter d'essayer de lancer le custom cliquez sur l'événement tous ensemble.
Après un café ce matin, il a été un peu plus clair pour moi. J'ai ajouté ce code comme un travail autour de.
Ce simplement vérifie TOUTES mes cases à cocher dans ma Table, et le bon-cliquez événement est déclenché lorsque mon masterCheck est cliqué après le fait.