Я знаю, что это плохая практика. Не пишите код, как это, если это вообще возможно.
Конечно, мы всегда окажемся в ситуациях, когда умный фрагмент встроенного 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 cruft, висящих на остальной части страницы, что замедляет рендеринг. Это похоже на концепцию локальности ссылки, но вместо промахов кэша мы смотрим на ошибки и раздувание кода.