Я думаю, что многие разработчики сделают это либо по незнанию, либо от незнания (что, конечно, распространено), а остальные разработчики сделают это потому, что просто удобнее использовать атрибуты HTML-JS, чем позднее связывание, если вы знаете, что определенные объекты и функции всегда загружаются на каждой странице, и они будут просто «там».
Я думаю, что это особенно верно, когда упомянутый HTML исходит из обратного вызова AJAX. Возьмем пример, когда запрос AJAX возвращается с ответом в формате HTML, и этот HTML-код вставляется на страницу. Теперь наивный разработчик будет думать примерно так:
- Я понятия не имею, какие элементы находятся внутри этого HTML-кода ответа, поэтому я не знаю, какие поздние привязки мне нужно добавить.
- Возможно, мне нужно добавить их все на всякий случай! Или написать какой-нибудь скрипт разбора, который обнаруживает элементы и привязывается к тем, которые я нахожу?
- Но что, если мне нужно привязать к чему-то, чего еще не существует? Пришло время написать длинный встроенный JavaScript!
Все это можно устранить, используя своего рода вездесущую привязку, которая применяется ко всем текущим и будущим элементам на странице. В jQuery эквивалентом является live(). Вместо того, чтобы писать:
$('.foo').click(function(){...});
Вы можете написать:
$('.foo').live('click', function(){...});
Теперь все элементы с именем класса 'foo' будут выполнять функцию при нажатии, включая элементы, которые в настоящее время не существуют. Очень полезно для динамических интерфейсов AJAX.
Возможно, вы уже это знаете, но я просто указываю на то, что все, что могут делать атрибуты JS, чистый JS может работать лучше, и я считаю это лучшей практикой.
person
BoffinBrain
schedule
13.06.2011