Я знаю, що це погана практика. Не пишіть такий код, якщо це можливо.
Звичайно, ми завжди опиняємося в ситуаціях, коли розумний фрагмент вбудованого Javascript може швидко вирішити проблему.
Я переслідую цей запит в інтересах повного розуміння того, що відбувається (і потенційних підводних каменів), коли щось подібне написано:
<a href="#" onclick="alert('Hi')">Click Me</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>
Екстраполюючи з цього, здається, що рядок, призначений атрибуту onclick, вставляється в анонімну функцію, яка призначена обробнику клацання елемента. Це насправді так?
Тому що я починаю робити такі речі:
<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! -->
Який працює. Але я не знаю, скільки це хак. Це виглядає підозріло, оскільки немає видимої функції, з якої повертаються!
Ви можете запитати, чому ви це робите, Стів? Inline JS - це погана практика!
Ну, якщо бути чесним, мені набридло редагувати три різні розділи коду, щоб змінити один розділ сторінки, особливо коли я просто щось прототипую, щоб побачити, чи буде він взагалі працювати. Це набагато простіше, а іноді навіть має сенс, щоб код, специфічно пов'язаний з цим HTML-елементом, був визначений прямо в рамках елемента: Коли через 2 хвилини я вирішу, що це була жахлива, жахлива ідея, я можу загнати весь div (або що завгодно) ) і в мене немає кулі таємничих JS і CSS сутких, що розвішуються на решті сторінки, сповільнюючи візуалізацію все так незначно. Це схоже на концепцію місцевості відліку, але замість кешу не вистачає, ми дивимося на помилки та розширення коду.
#click_meна подію DOMready або розмістити сценарій після вузла.
document.getElementById("click_me").onclick;. Або попередити про це. Ви побачите, що це у функції.