Je sais que c'est une mauvaise pratique. Ne pas écrire de code comme celui-ci si possible.
Bien sûr, nous allons toujours nous trouver dans des situations où un savant extrait de Javascript en ligne peut résoudre un problème rapidement.
Je suis à la poursuite de cette requête dans l'intérêt de bien comprendre ce qui se passe (et les pièges potentiels), quand quelque chose comme ce qui est écrit:
<a href="#" onclick="alert('Hi')">Click Me</a>
Aussi loin que je peux dire c'est fonctionnellement identique à
<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 onclick
est inséré à l'intérieur d'une fonction anonyme qui est attribué à l'élément du gestionnaire de clic. Est-ce effectivement 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! -->
Qui fonctionne. Mais je ne sais pas combien de un hack c'est. Il a l'air suspect, car il n'y a apparemment pas de fonction qui est retourné à partir de!
Vous pourriez vous demander, pourquoi vous faites cela, Steve? Inline JS est une mauvaise pratique!
Eh bien, pour être tout à fait honnête, je suis fatigué de l'édition de trois différentes sections de code pour modifier une section d'une page, surtout quand je suis juste de prototypage quelque chose pour voir si elle va travailler à tous. Il est tellement plus facile et parfois même sens pour le code spécifiquement liés à cet élément HTML à être défini droit à l'intérieur de l'élément: Lorsque je décide de 2 minutes plus tard, ce fut une terrible, terrible idée que je peux nuke l'ensemble de la div (ou autre) et je n'ai pas un tas de mystérieux JS et CSS trucs traîner dans le reste de la page, ce qui ralentit le rendu très légèrement. Ceci est similaire à la notion de la localité de référence, mais au lieu de cache nous sommes à la recherche à des bugs de code et de ballonnement.