Я знаю, что это плохая практика. Не пишите такой код, если это вообще возможно.
Конечно, мы всегда оказываемся в ситуациях, когда умный фрагмент встроенного 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! -->
Что работает. Но я не знаю, насколько это взлом. Это выглядит подозрительно, потому что нет явной функции, из которой возвращается!
Вы можете спросить, почему ты это делаешь, Стив? Встроенный JS - плохая практика!
Честно говоря, я устал редактировать три разных раздела кода только для того, чтобы изменить один раздел страницы, особенно когда я просто создаю прототип, чтобы посмотреть, будет ли это вообще работать. Это намного проще, а иногда даже имеет смысл, чтобы код, специально связанный с этим элементом HTML, был определен прямо внутри элемента: когда через 2 минуты я решаю, что это была ужасная, ужасная идея, я могу уничтожить весь div (или что-то еще ), и у меня нет кучи таинственного мусора JS и CSS, висящего на остальной части страницы, хоть сколько-нибудь замедляющего рендеринг. Это похоже на концепцию локальности ссылки, но вместо промахов кеша мы смотрим на ошибки и раздувание кода.
#click_me
привязать запрос к событию DOMready или разместить сценарий после узла.
document.getElementById("click_me").onclick;
. Или предупредить об этом. Вы увидите, что это функция.