Saya tahu ini adalah praktik buruk. Jangan menulis kode seperti ini jika memungkinkan.
Tentu saja, kita akan selalu menemukan diri kita dalam situasi di mana potongan pintar Javascript inline dapat mengatasi masalah dengan cepat.
Saya mengejar pertanyaan ini untuk memahami sepenuhnya apa yang terjadi (dan potensi jebakan) ketika sesuatu seperti ini ditulis:
<a href="#" onclick="alert('Hi')">Click Me</a>
Sejauh yang saya tahu ini secara fungsional sama dengan
<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>
Ekstrapolasi dari ini nampaknya bahwa string yang ditugaskan untuk atribut onclickdimasukkan dalam fungsi anonim yang ditugaskan untuk penangan klik elemen. Apakah ini yang sebenarnya terjadi?
Karena saya mulai melakukan hal-hal seperti ini:
<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! -->
Yang bekerja Tapi saya tidak tahu seberapa banyak retasan ini. Ini terlihat mencurigakan karena tidak ada fungsi jelas yang sedang dikembalikan!
Anda mungkin bertanya, mengapa Anda melakukan ini, Steve? Inline JS adalah praktik buruk!
Ya jujur saja, saya bosan mengedit tiga bagian kode yang berbeda hanya untuk memodifikasi satu bagian halaman, terutama ketika saya hanya membuat prototipe sesuatu untuk melihat apakah itu akan bekerja sama sekali. Ini jauh lebih mudah dan kadang-kadang bahkan masuk akal untuk kode yang secara khusus terkait dengan elemen HTML ini untuk didefinisikan tepat di dalam elemen: Ketika saya memutuskan 2 menit kemudian bahwa ini adalah ide yang mengerikan, mengerikan saya bisa memuntahkan seluruh div (atau apa pun ) dan saya tidak memiliki banyak JS misterius dan cruft berkeliaran di sisa halaman, memperlambat rendering sedikit. Ini mirip dengan konsep lokalitas referensi tetapi alih-alih meleset dari cache, kami melihat bug dan mengasapi kode.
#click_meacara DOMready, atau menempatkan skrip setelah node.
document.getElementById("click_me").onclick;. Atau beri tahu. Anda akan melihat bahwa itu ada dalam suatu fungsi.