Ich weiß, dass dies eine schlechte Praxis ist. Schreiben Sie keinen solchen Code, wenn dies überhaupt möglich ist.
Natürlich befinden wir uns immer in Situationen, in denen ein cleverer Ausschnitt aus Inline-Javascript ein Problem schnell beheben kann.
Ich verfolge diese Abfrage, um vollständig zu verstehen, was passiert (und welche potenziellen Gefahren es gibt), wenn so etwas geschrieben wird:
<a href="#" onclick="alert('Hi')">Click Me</a>
Soweit ich das beurteilen kann, ist dies funktional dasselbe wie
<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>
Aus diesem Grund scheint es, dass die dem Attribut zugewiesene Zeichenfolge onclickin eine anonyme Funktion eingefügt wird, die dem Klick-Handler des Elements zugewiesen ist. Ist das tatsächlich der Fall?
Weil ich anfange, solche Dinge zu tun:
<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! -->
Welches funktioniert. Aber ich weiß nicht, wie viel Hack das ist. Es sieht verdächtig aus, weil es keine offensichtliche Funktion gibt, von der zurückgegeben wird!
Sie könnten fragen, warum machen Sie das, Steve? Inline JS ist eine schlechte Praxis!
Um ganz ehrlich zu sein, habe ich es satt, drei verschiedene Codeabschnitte zu bearbeiten, um nur einen Abschnitt einer Seite zu ändern, insbesondere wenn ich nur Prototypen erstelle, um zu sehen, ob es überhaupt funktioniert. Es ist so viel einfacher und manchmal sogar sinnvoll, den Code, der sich speziell auf dieses HTML-Element bezieht, direkt im Element zu definieren : Wenn ich 2 Minuten später entscheide, dass dies eine schreckliche, schreckliche Idee war, kann ich das gesamte div (oder was auch immer) zerstören ) und ich habe keine Menge mysteriöser JS- und CSS-Cruft im Rest der Seite, die das Rendern etwas verlangsamen. Dies ähnelt dem Konzept der Referenzlokalität, aber anstelle von Cache-Fehlern betrachten wir Fehler und aufgeblähten Code.
#click_medas DOMready-Ereignis verknüpfen oder das Skript nach dem Knoten platzieren.
document.getElementById("click_me").onclick;. Oder alarmieren Sie es. Sie werden sehen, dass es sich um eine Funktion handelt.