web-dev-qa-db-fra.com

obtenir la valeur de "onclick" avec jQuery?

Est-il possible d'obtenir la valeur actuelle de l'attribut onClick d'une balise A via jQuery?

Par exemple, j'ai:

<a href="http://www.google.com" id="google" onclick="alert('hello')">Click</a>

Je souhaite obtenir le code onclick afin de pouvoir le stocker pour une utilisation ultérieure (car je vais modifier l'événement onclick pendant un moment).

Est-il possible de faire quelque chose comme:

var link_click = $("#google").onclick;

ou:

var link_click = $("#google").click;

Pour que plus tard dans mon code je puisse réappliquer ce code, ou bien eval () le si nécessaire?

28
Mike Trpcic

je n'ai jamais fait ça, mais ça se ferait comme ça:

var script = $('#google').attr("onclick")
44
mkoryak

mkoryak est correct.

Toutefois, si les événements sont liés à ce nœud DOM à l'aide de méthodes plus modernes (n'utilisant pas onclick), cette méthode échouera.

Si c'est ce que vous voulez vraiment, consultez cette question et sa réponse acceptée.

À votre santé!


J'ai relu ta question.
J'aimerais vous dire ceci: n'utilisez pas onclick, onkeypress et les préférences pour lier des événements.

Utiliser de meilleures méthodes comme addEventListener() vous permettra de: 

  1. Ajouter plus d'un gestionnaire d'événements à un événement particulier
  2. supprimer certains auditeurs de manière sélective

Au lieu d'utiliser réellement addEventListener(), vous pouvez utiliser des wrappers jQuery tels que $('selector').click().

Bravo encore!

13
jrharshath

Ça marche pour moi

 var link_click = $('#google').get(0).attributes.onclick.nodeValue;
 console.log(link_click);
12
hexdump
$('#google').attr('onclick') + ""

Cependant, Firebug montre que cela retourne une fonction 'onclick'. Vous pouvez appeler la fonction ultérieurement en utilisant l'approche suivante:

(new Function ($('#google').attr('onclick') + ';onclick();'))()

... ou utilisez un RegEx pour effacer la function et obtenir uniquement les instructions qu'il contient.

11
Alex Gyoshev

Je ne sais pas trop comment faire cela dans jQuery ... mais cela fonctionne:

var x = document.getElementById('google').attributes;
for (var i in x) {
 if (x[i].name == "onclick") alert(x[i].firstChild.data);
}

mais comme Harshath l'a dit, il serait préférable d'utiliser des écouteurs d'événement, car supprimer et rajouter cette fonction dans l'événement onclick peut être gênant.

4
Mottie

Pourriez-vous expliquer ce que vous essayez exactement d'accomplir? En général, vous ne devez JAMAIS obtenir l'attribut onclick à partir d'éléments HTML. De plus, vous ne devez pas spécifier onClick sur l'élément lui-même. Au lieu de cela, définissez onclick de manière dynamique à l'aide de JQuery. 

Mais pour autant que je sache, vous essayez de basculer entre deux fonctions onclick différentes. Ce qui pourrait être mieux, c’est d’implémenter votre fonction onclick de manière à ce qu’elle puisse gérer les deux situations.

$("#google").click(function() {
    if (situation) {
        // ...
    } else {
        // ...
    }
});
0
Tom van Zummeren