Je sais que c'est une mauvaise pratique. N'écrivez pas de code comme celui-ci si possible.
Bien sûr, nous nous trouverons toujours dans des situations où un extrait intelligent de Javascript en ligne peut résoudre un problème rapidement.
Je poursuis cette requête dans l'intérêt de comprendre pleinement ce qui se passe (et les pièges potentiels) quand quelque chose comme ceci est écrit:
<a href="#" onclick="alert('Hi')">Click Me</a>
Autant que je sache, c'est fonctionnellement le même que
<script type="text/javascript">
$(function(){ // I use jQuery in this example
document.getElementById('click_me').onclick =
function () { alert('Hi'); };
});
</script>
<a href="#" id="click_me">Click Me</a>
En extrapolant à partir de cela, il semble que la chaîne affectée à l'attribut onclicksoit insérée dans une fonction anonyme qui est affectée au gestionnaire de clics de l'élément. Est-ce vraiment le cas?
Parce que je commence à faire des choses comme ça:
<a href="#" onclick="$(this).next().fadeIn(); return false;">Display my next sibling</a> <!-- Return false in handler so as not to scroll to top of page! -->
Ce qui fonctionne. Mais je ne sais pas à quel point c'est un hack. Cela semble suspect car il n'y a aucune fonction apparente qui est renvoyée!
Vous pourriez demander, pourquoi faites-vous ça, Steve? Inline JS est une mauvaise pratique!
Eh bien, pour être tout à fait honnête, je suis fatigué d'éditer trois sections différentes de code juste pour modifier une section d'une page, en particulier lorsque je ne fais que prototyper quelque chose pour voir si cela fonctionnera. C'est tellement plus facile et parfois même logique que le code spécifiquement lié à cet élément HTML soit défini directement dans l'élément: quand je décide 2 minutes plus tard que c'était une idée terrible, terrible, je peux détruire le div entier (ou peu importe ) et je n'ai pas un tas de mystérieux crottes JS et CSS qui traînent dans le reste de la page, ralentissant très légèrement le rendu. Ceci est similaire au concept de localité de référence, mais au lieu de manquer de cache, nous examinons les bogues et le gonflement du code.
#click_mesur l'événement DOMready ou placer le script après le nœud.
document.getElementById("click_me").onclick;. Ou alertez-le. Vous verrez que c'est dans une fonction.