So che questa è una cattiva pratica. Non scrivere codice come questo, se possibile.
Naturalmente, ci troveremo sempre in situazioni in cui un frammento intelligente di Javascript inline può risolvere rapidamente un problema.
Sto perseguendo questa domanda nell'interesse di comprendere appieno cosa succede (e le potenziali insidie) quando viene scritto qualcosa del genere:
<a href="#" onclick="alert('Hi')">Click Me</a>
Per quanto posso dire questo è funzionalmente uguale a
<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>
Estrapolando da ciò sembra che la stringa assegnata all'attributo onclicksia inserita all'interno di una funzione anonima assegnata al gestore di clic dell'elemento. È davvero così?
Perché sto iniziando a fare cose del genere:
<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! -->
Che funziona Ma non so quanto sia un hack questo. Sembra sospetto perché non vi è alcuna funzione apparente che viene restituita!
Potresti chiedere, perché lo stai facendo, Steve? Inline JS è una cattiva pratica!
Beh, ad essere sincero, sono stanco di modificare tre diverse sezioni di codice solo per modificare una sezione di una pagina, specialmente quando sto solo prototipando qualcosa per vedere se funzionerà affatto. È molto più semplice e talvolta ha persino senso che il codice specificamente correlato a questo elemento HTML sia definito proprio all'interno dell'elemento: quando decido 2 minuti più tardi che questa è stata un'idea terribile e terribile, posso annusare l'intero div (o qualunque cosa ) e non ho un mucchio di misteriose cruft JS e CSS in giro nel resto della pagina, che rallentano leggermente il rendering. Questo è simile al concetto di località di riferimento, ma invece di errori nella cache stiamo osservando bug e code bloat.
#click_meall'evento DOMready o posizionare lo script dopo il nodo.
document.getElementById("click_me").onclick;. O avvisalo. Vedrai che è in una funzione.