Bunun kötü bir uygulama olduğunu biliyorum. Mümkünse böyle kod yazmayın.
Elbette, kendimizi her zaman akıllı bir satır içi Javascript pasajının bir sorunu hızlı bir şekilde çözebileceği durumlarda bulacağız.
Böyle bir şey yazıldığında ne olduğunu (ve olası tuzakları) tam olarak anlamak için bu sorguyu takip ediyorum:
<a href="#" onclick="alert('Hi')">Click Me</a>
Anlayabildiğim kadarıyla bu işlevsel olarak aynı
<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>
Bundan çıkarım yaparak, özniteliğe atanan dizenin onclick, öğenin tıklama işleyicisine atanan anonim bir işlevin içine yerleştirildiği görülmektedir. Durum gerçekten bu mu?
Çünkü bunun gibi şeyler yapmaya başlıyorum:
<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! -->
Hangisi çalışıyor. Ama bunun ne kadar bir hack olduğunu bilmiyorum. Şüpheli görünüyor çünkü geri döndürülen görünürde bir işlev yok!
Sorabilirsin, bunu neden yapıyorsun Steve? Satır içi JS kötü bir uygulamadır!
Dürüst olmak gerekirse, bir sayfanın bir bölümünü değiştirmek için kodun üç farklı bölümünü düzenlemekten yoruldum, özellikle de işe yarayıp yaramayacağını görmek için bir şeyin prototipini oluşturduğumda. Bu HTML öğesiyle özellikle ilgili kodun öğenin içinde tanımlanması çok daha kolaydır ve hatta bazen mantıklıdır : 2 dakika sonra bunun korkunç, berbat bir fikir olduğuna karar verdiğimde tüm div'i (veya her neyse ) ve sayfanın geri kalanında, oluşturma işlemini çok az yavaşlatan bir sürü gizemli JS ve CSS bozukluğum yok. Bu, referansın yerelliği kavramına benzer, ancak önbellek eksiklikleri yerine hatalara ve kod şişmesine bakıyoruz.
#click_meDOMready olayına bağlamanız veya komut dosyasını düğümden sonra yerleştirmeniz gerekir.
document.getElementById("click_me").onclick;. Ya da uyarın. Bunun bir işlevde olduğunu göreceksiniz.