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?
je n'ai jamais fait ça, mais ça se ferait comme ça:
var script = $('#google').attr("onclick")
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:
Au lieu d'utiliser réellement addEventListener()
, vous pouvez utiliser des wrappers jQuery
tels que $('selector').click()
.
Bravo encore!
Ça marche pour moi
var link_click = $('#google').get(0).attributes.onclick.nodeValue;
console.log(link_click);
$('#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.
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.
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 {
// ...
}
});