web-dev-qa-db-fra.com

Simuler un clic dans jQuery / JavaScript sur un lien

Je souhaite simuler un clic sur n'importe quel lien d'une page à l'aide de JavaScript. Si ce lien a une fonction liée à son événement 'onclick' (par un autre JS sur lequel je n'ai aucun contrôle), alors cette fonction doit être appelée, sinon le lien devrait se comporter normalement et ouvrir une nouvelle page.

Je ne suis pas sûr que le simple fait de vérifier la valeur du gestionnaire 'onclick' suffirait. Je veux construire ceci afin qu'il fonctionne sur n'importe quel élément de lien.

Je ne contrôle pas quelle fonction peut être liée à l'événement onclick du lien en utilisant la bibliothèque JS (pas nécessairement jQuery) ou en utilisant simplement JavaScript.

EDIT: À l’aide des réponses ci-dessous, il semble possible de vérifier la présence de gestionnaires d’événements attachés à l’aide de jQuery ou de l’attribut onclick. Comment puis-je vérifier les gestionnaires d'événements attachés à l'aide de addEventListener/de toute autre bibliothèque JS afin qu'elle soit infaillible?

52
ankit

Vous pouvez utiliser la fonction click pour déclencher l'événement click sur l'élément sélectionné.

Exemple:

$( 'selector for your link' ).click ();

Vous pouvez en apprendre davantage sur les divers sélecteurs dans documentation de jQuery.

EDIT: comme les commentateurs ci-dessous ont dit; cela ne fonctionne que sur les événements attachés avec jQuery, inline ou dans le style de "element.onclick". Cela ne fonctionne pas avec addEventListener et ne suivra pas le lien si aucun gestionnaire d'événement n'est défini. Vous pouvez résoudre ceci avec quelque chose comme ceci:

var linkEl = $( 'link selector' );
if ( linkEl.attr ( 'onclick' ) === undefined ) {
    document.location = linkEl.attr ( 'href' );
} else {
    linkEl.click ();
}

Je ne sais pas sur addEventListener cependant.

47
Jan Hančič

Pourquoi ne pas simplement le bon vieux javascript?

$('#element')[0].click()

40
frankies

Juste

$("#your_item").trigger("click");

en utilisant .trigger (), vous pouvez simuler de nombreux types d’événements, en le passant comme paramètre.

30
tanathos

Facile! Utilisez juste la fonction click de jQuery:

$("#theElement").click();
8
Robert Grant

Essaye ça

function submitRequest(buttonId) {
    if (document.getElementById(buttonId) == null
            || document.getElementById(buttonId) == undefined) {
        return;
    }
    if (document.getElementById(buttonId).dispatchEvent) {
        var e = document.createEvent("MouseEvents");
        e.initEvent("click", true, true);
        document.getElementById(buttonId).dispatchEvent(e);
    } else {
        document.getElementById(buttonId).click();
    }
}

et vous pouvez l'utiliser comme

submitRequest("target-element-id");
7
Yashpal Singla

Dans un premier temps, voyez ceci question pour voir comment vous pouvez trouver si un lien a un gestionnaire jQuery attribué.

Utilisation suivante:

$("a").attr("onclick")

pour voir si un événement javascript lui est attribué.

Si l'un des éléments ci-dessus est vrai, appelez la méthode click. Sinon, obtenez le lien:

$("a").attr("href")

et suivez-le.

J'ai bien peur de ne pas savoir quoi faire si addEventListener est utilisé pour ajouter un gestionnaire d'événements. Si vous êtes responsable de la source de la page complète, utilisez uniquement les gestionnaires d’événements jQuery.

1
kgiannakakis

Tout ceci pourrait ne pas aider à dire quand vous utilisez Rails bouton de formulaire distant pour simuler un clic. J'ai essayé de porter la simulation d’événements Nice depuis le prototype ici: mes extraits . Je viens de le faire et ça marche pour moi.

0
sergeych