Javascript OnClick кросс-браузер дружественный? - PullRequest
6 голосов
/ 20 августа 2010

Могу ли я использовать следующее во всех браузерах?

<a href="#" onclick="doSomething()">Click here.</a>

Является ли это "плохой практикой" в отношении стандартов?

Будет ли это работать на IE, FF, Safari и Chrome?

Ответы [ 6 ]

9 голосов
/ 20 августа 2010

Можно ли использовать следующее во всех браузерах?

Да

Является ли это "плохой практикой" в отношении стандартов?

«Плохая практика» и «Соответствие стандартам» - это разные вещи. Это соответствует стандартам, но также, по трем причинам, является плохой практикой.

  1. Это не ненавязчиво . Обработчики событий лучше применять с JS.
  2. Он ссылается на верх страницы (#) и всегда отправляет туда браузер, даже если JS работает.
  3. Если JS не работает, ничего полезного не произойдет. Вы должны опираться на то, что работает .

Будет ли это работать на IE, FF, Safari и Chrome?

Да

6 голосов
/ 20 августа 2010

Несмотря на то, что некоторые люди могут сказать, что это неплохая практика (с учетом того, что это единственный прослушиватель событий, который вам нужен для этого элемента), и это самый простой (и наиболее распространенный) кросс-браузерный способ добавить прослушиватель событий, но я бы сделал два изменения.

Прежде всего, если Javascript не включен, ссылка будет бесполезной (хотя ссылка # заставит браузер прокрутить страницу вверх, что, вероятно, нежелательно). Точно так же при включенном Javascript нажатие на ссылку все равно заставит браузер перейти по ссылке и прокрутить вверх.

Вместо этого я бы использовал что-то вроде этого:

<a href="[url to JS-less way of doing the same thing]" onclick="doSomething(); return false">Click here</a>

С другой стороны, если это действительно только JavaScript, вы можете сделать ссылку скрытой по умолчанию с помощью CSS и использовать Javascript, чтобы сделать ее видимой (чтобы пользователи с отключенным JS не увидели бесполезную ссылку).

2 голосов
/ 20 августа 2010

onclick является кросс-браузерным.Разумеется, дискуссия о стандартах и ​​лучших практиках намного шире.Большинство скажет, что «прогрессивное улучшение» является предпочтительным.Простое объяснение этого состоит в том, что ссылка все равно будет работать правильно, а версия javascript только улучшит поведение.То, насколько это важно для вас, зависит от того, чем вы занимаетесь, чем занимаетесь и т. Д.

0 голосов
/ 20 августа 2010

Он будет работать во всех браузерах, но в большинстве случаев рекомендуется использовать обработчики кликов, такие как jQuery $('a').click(doSomething);, что делает JavaScript более независимым от HTML.Также таким образом можно подключить несколько обработчиков и с помощью обработчиков методов jQuery live можно добавлять к элементам HTML, которые динамически добавляются на страницу.

0 голосов
/ 20 августа 2010

С этой страницы Википедии onClick указан в разделе событий Common / W3C и поддерживается упомянутыми вами браузерами.

Как бы то ни было, большинство веб-приложений не будут работать в этих браузерах.

0 голосов
/ 20 августа 2010

Это должно работать в браузерах, которые вы упомянули.

Попробуйте привыкнуть ставить ; в конце каждой строки Javascript:

<a href="#" onclick="doSomething();">Click here.</a>

Хотябез него все будет работать нормально, если у вас возникнет эта хорошая привычка, вы сможете избежать неприятностей позже, когда будете писать более крупные сценарии.

Если вы не хотите, чтобы # отображался в строке адреса:

<a href="#" onclick="doSomething(); return false;">Click here.</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...