Utilisation de jQuery pour déclencher html événement onclick
<input type="text" id="test_value" name="test_value" value="xyz" />
<input id="test_default" name="test_default" type="checkbox" onclick="with(this.form.elements['test_value']) { disabled = this.checked; if (this.checked) { value = ''; } else {if(value=='') {value=' '; value = '';}}};" />
La ligne onclick est généré par un cms qui je n'ai aucun contrôle.
Je veux exécuter $("#test_default").click();
avec jQuery mais cela ne fonctionne pas car il n'est pas lié à la jQuery gestionnaire d'événement.
J'ai essayé les variations de
$("#test_default").click(function (e) {
$(e.target).attr("onclick").apply(checkbox, [e]);
return false;
}).click();
mais sans succès. S'Il Vous Plaît Aider.
Grâce.
Il y a des douzaines de différentes fonctions qui peuvent être en ligne dans le onclick. Il n'est pas vraiment une option pour les dupliquer et de les exécuter en parallèle.
Les réponses de travail dans une petite démo, mais pas dans l'environnement direct. S'il vous plaît regardez http://jsfiddle.net/GtJjt/ j'ai besoin de la case pour être déclenché par programmation.
Bizarrement, $("#metadata_field_text_10190_default")[0].click();
déclenche l'événement correctement. Quelqu'un peut-il m'expliquer cela?
- Il n'y a pas de type <input id="te st_value" name="te st_value" value="xyz" />. Probablement, vous devez lier cliquez sur() ou utiliser live().
Vous devez vous connecter pour publier un commentaire.
Appeler le natif DOM du
onclick
directement (voir la démo):Ou sans jQuery à tous,
Mise à jour:
Le véritable problème de l'interaction entre jQuery
.click()
et la ligneonclick
code. jQuery.click()
en fait deux choses: il première déclenche l'un des gestionnaires d'événements, y compris la ligneonclick
code, puis il provoque la case à cocher pour devenir vérifié.Le problème se pose parce que le code en ligne teste si la case est cochée. Parce que ce est déclenchée en premier, le code conclut que la case à cocher n'est pas cochée, et ne pas faire n'importe quoi. Maintenant, après c'est fini, jQuery va alors et vérifie que la case à cocher.
Comment pouvons-nous résoudre ce problème? Nous cochez la case d'abord manuellement, puis d'appeler la ligne de gestionnaire. Malheureusement, nous ne pouvons pas utiliser jQuery
.click()
à appeler la ligne de gestionnaire, car il vous décochez la case à cocher à nouveau (il sera également appel à d'autres jQuery-tenu des gestionnaires d'événement si vous ajoutez à l'avenir, vous ne voulez probablement pas que). Par conséquent, nous utilisons les natifs de DOM méthode que j'ai décrite plus haut, car son seul effet est d'exécuter le code en ligne.Code Final est: est-ce
Voir démo: http://jsfiddle.net/GtJjt/3/. (J'ai inclus un
console.log
dans la ligne de code pour la démo de prouver que le code en ligne est en cours d'exécution. Supprimer cette si votre navigateur est Firefox ou Chrome ou il va se planter).Mise à jour:
Je n'ai pas vu votre solution antérieure Simon, merci pour me rappeler à l'ordre
[0].click()
. Essentiellement, c'est le natif de l'équivalent de jQuery.click()
et fonctionne parce que c'est ce que j'ai décrit ci-dessus (en cochant la case tout d'abord, puis en appelant la ligne de code). Un avertissement cependant: cela permettra également d'appeler les gestionnaires d'événements liés avec jQuery, qui peut ne pas être ce que vous voulez.$("input[type=checkbox]:checked").each(function() {});
donc fonctionne de toute façon. Heureux de fixer celui-ci.Il suffit de ne pas
return false
et il va avoir appelé:Si vous voulez éviter une action par défaut, utilisez
e.peventDefault()
au lieu de cela, qui ne tuent pas le cas. Aussi, par rapport à votre inlineonclick
gestionnaire (pourquoi ne pas le faire tous discrètement?), Je recommande vivement contre l'utilisation dewith
.$("#test_default").click()
, mais ce n'était pas ce à quoi vous avez demandé 🙂onclick
attribut. Alors que jQuery est.click()
doit déclenchement de ce code en ligne, j'imagine qu'il y a autre chose qui est de l'arrêter car Simon a dit que$("#test_default").click();
ne fonctionne pas. Si c'est le cas, je ne vois pas comment cette réponse est toute différente, et pourquoi toute liaison est nécessaire.onchange
ligne ici, alorsclick
avec jQuery (si possible), comme ceci: jsfiddle.net/nick_craver/GtJjt/4J'ai utilisé le déclencheur en html avec de l'événement onclick comme suit:
.trigger("onclick")
, j'ai utilisé.trigger("click")
. Merci encore!J'utilise le code suivant:
Dans votre cas: