Можно ли использовать следующее во всех браузерах?
<a href="#" onclick="doSomething()">Click here.</a>
Является ли это «плохой практикой» в отношении стандартов?
Будет ли это работать в IE, FF, Safari и Chrome?
Могу ли я использовать следующее во всех браузерах?
Да
Является ли это "плохой практикой" в отношении стандартов?
"Плохая практика" и "соответствие стандартам" - разные вещи. Это соответствует стандартам, но также, по трем причинам, является плохой практикой.
#
) и всегда будет отправлять браузер туда, даже если JS запущен. Будет ли это работать в IE, FF, Safari и Chrome?
Да
Несмотря на то, что некоторые люди могут сказать, что это неплохая практика (с оговоркой, что это единственный слушатель событий, который вам нужен на этом элементе), и это самый простой (и наиболее распространенный) кроссбраузерный способ добавления слушателя событий, но есть два изменения, которые я бы внес в него.
Во-первых, если Javascript не включен, ссылка будет бесполезна (хотя #
href заставит браузер прокрутить страницу до верха, что, вероятно, нежелательно). Аналогично, если включен Javascript, щелчок по ссылке все равно заставит браузер следовать за href и прокручивать страницу вверх.
Вместо этого я бы использовал что-то вроде этого:
<a href="[url to JS-less way of doing the same thing]" onclick="doSomething(); return false">Click here</a>
В качестве альтернативы, если это действительно только для javascript, вы можете сделать ссылку скрытой по умолчанию с помощью CSS и использовать Javascript, чтобы сделать ее видимой (чтобы пользователи с отключенным JS не видели бесполезную ссылку).
onclick
является кроссбраузерным. Дискуссия о стандартах и лучших практиках, конечно, гораздо шире. Большинство скажет, что "прогрессивное улучшение" предпочтительнее. Простое объяснение этого заключается в том, что ссылка по-прежнему будет делать правильные вещи, а версия javascript только улучшит поведение. Важно ли это для вас или нет, зависит от того, что вы делаете, каков проект и т.д.
На этой странице Википедии onClick
внесен в список общих событий / событий W3C и поддерживается указанными вами браузерами.
Кстати, если бы это было не так, большинство веб-приложений не работали бы в этих браузерах.
Это должно работать в упомянутых вами браузерах.
Попробуйте взять за привычку ставить ;
в конце каждой "строки" Javascript:
<a href="#" onclick="doSomething();">Click here.</a>
Хотя все будет работать нормально и без этого, если вы выработаете эту привычку, то сможете избавить себя от проблем позже, когда будете писать большие скрипты.
Если вы не хотите, чтобы #
отображался в строке местоположения:
<a href="#" onclick="doSomething(); return false;">Click here.</a>
Это будет работать во всех браузерах, но в качестве лучшей практики большинство использует обработчики кликов, такие как jQuery $('a').click(doSomething);
, что делает JavaScript более независимым от HTML. Также таким образом можно подключать несколько обработчиков, а с помощью метода jQuery live
обработчики можно добавлять к HTML-элементам, которые динамически добавляются на страницу.