Я хочу запустить простую функцию JavaScript на клик без перенаправления.
Есть ли какая-либо разница или польза от помещения вызова JavaScript в href
атрибут (например, так:
<a href="javascript:my_function();window.print();">....</a>
) против помещения его в onclick
атрибут (связывание с onclick
событием)?
javascript
href
SkunkSpinner
источник
источник
Ответы:
Помещение onclick в href оскорбит тех, кто твердо верит в отделение контента от поведения / действия. Аргумент заключается в том, что ваш HTML-контент должен оставаться сфокусированным исключительно на контенте, а не на представлении или поведении.
Типичный путь в эти дни - использовать библиотеку javascript (например, jquery) и создать обработчик событий, используя эту библиотеку. Это будет выглядеть примерно так:
источник
href
и inline inonclick
? Предполагая, что вы по какой-то причине собираетесь вставить его в строку, что вам следует использовать? (На практике я бы сделал то, что вы предложили, но вы, кажется, пропустили разницу междуплохой:
хорошо:
лучше:
еще лучше 1:
еще лучше 2:
Почему лучше? потому что
return false
не позволит браузеру перейти по ссылкеЛучший:
Используйте jQuery или другую подобную инфраструктуру, чтобы прикрепить обработчик onclick по идентификатору элемента.
источник
href
не указано#
иное, а есть реальная ссылка для браузеров noJS.С точки зрения javascript , одно отличие состоит в том, что
this
ключевое слово вonclick
обработчике будет ссылаться на элемент DOM,onclick
атрибут которого он (в данном случае на<a>
элемент), тогда какthis
вhref
атрибуте будет ссылаться наwindow
объект.С точки зрения представления , если
href
атрибут отсутствует в ссылке (то есть<a onclick="[...]">
), то по умолчанию браузеры будут отображатьtext
курсор (а не часто требуемыйpointer
курсор), поскольку он обрабатывает<a>
как привязку, а не ссылку.С точки зрения поведения , при указании действия с помощью навигации
href
, браузер обычно поддерживает открытиеhref
в отдельном окне с помощью ярлыка или контекстного меню. Это невозможно при указании действия только черезonclick
.Однако, если вы спрашиваете, каков наилучший способ получить динамическое действие от щелчка объекта DOM, тогда лучше всего присоединить событие, используя javascript отдельно от содержимого документа. Вы можете сделать это несколькими способами. Распространенным способом является использование библиотеки javascript, такой как jQuery, для привязки события:
источник
я использую
Долгий путь, но он выполняет свою работу. используйте стиль A для упрощения, тогда он становится:
источник
nohref
атрибутах раньше. Это наиболее логичный / элегантный способ обработки таких действий JavaScript. Это совместимо с FF12 и IE8. Поэтому я заменю все моиhref="JavaScript:void(0);"
наnohref
. Большое спасибо. Приветствия.nohref
является частьюarea
тега, а неa
! Ваш пример такой же, как<a onClick="alert('Hello World')">HERE</a>
nohref
не существует вa
теге.В дополнение ко всему, href отображается в строке состояния браузера, а onclick - нет. Я думаю, что не удобно показывать там код JavaScript.
источник
лучший способ сделать это с:
Проблема в том, что это добавит хеш (#) к концу URL-адреса страницы в браузере, что потребует от пользователя дважды нажать кнопку «Назад», чтобы перейти на страницу раньше вашей. Учитывая это, вам нужно добавить некоторый код, чтобы остановить распространение событий. У большинства наборов инструментов JavaScript уже есть функция для этого. Например, инструментарий Dojo использует
сделать это.
источник
href="#"
браузер, который будет искать именованный тег привязки, и, поскольку он не найдет его, то он сделает окно для прокрутки вверх страницы, что может быть не заметно, если ты уже на вершине. Чтобы избежать такого поведения, используйте:href="javascript:;"
вместо.Главный ответ - очень плохая практика, никогда не следует ссылаться на пустой хеш, так как это может создать проблемы в будущем.
Лучше всего связать обработчик событий с элементом, как заявили многие другие люди, однако он
<a href="javascript:doStuff();">do stuff</a>
отлично работает в любом современном браузере, и я широко использую его при рендеринге шаблонов, чтобы избежать необходимости повторной привязки для каждого экземпляра. В некоторых случаях этот подход предлагает лучшую производительность. YMMVЕще одна интересная новость ....
onclick
иhref
имеют другое поведение при вызове javascript напрямую.onclick
будет проходитьthis
контекст правильно, тогда какhref
не будет, или другими словами<a href="javascript:doStuff(this)">no context</a>
, не будет работать, тогда как<a onclick="javascript:doStuff(this)">no context</a>
будет.Да я пропустил
href
. Хотя это не соответствует спецификации, оно будет работать во всех браузерах, хотя в идеале оно должно включать вhref="javascript:void(0);"
себяисточник
имеющий
javascript:
любого атрибута, который не предназначен специально для сценариев, является устаревшим методом HTML. Хотя технически это работает, вы все равно назначаете свойства javascript атрибуту, не относящемуся к сценарию, что не является хорошей практикой. Он может даже потерпеть неудачу в старых браузерах или даже в некоторых современных (гугл-сообщение на форуме, похоже, указывает на то, что Opera не любит URL 'javascript:').Лучше было бы использовать второй способ - поместить ваш javascript в
onclick
атрибут, который игнорируется, если не доступны функции сценариев. Поместите действительный URL-адрес в поле href (обычно «#»), чтобы использовать его для тех, у кого нет JavaScript.источник
это сработало для меня, используя эту строку кода:
источник
Это работает
источник
Лично меня раздражает размещение вызовов javascript в теге HREF. Я обычно не особо обращаю внимание на то, является ли что-то ссылкой на JavaScript или нет, и часто хочется открыть что-то в новом окне. Когда я пытаюсь сделать это с одним из этих типов ссылок, я получаю пустую страницу, на которой ничего нет, и javascript в моей адресной строке. Тем не менее, это немного обойти с помощью onlick.
источник
Еще одна вещь, которую я заметил при использовании «href» с javascript:
Скрипт в атрибуте "href" не будет выполнен, если разница во времени между двумя кликами была достаточно короткой.
Например, попробуйте запустить следующий пример и дважды щелкните (быстро!) На каждой ссылке. Первая ссылка будет выполнена только один раз. Вторая ссылка будет выполнена дважды.
Воспроизводится в Chrome (двойной щелчок) и IE11 (с тройным щелчком). В Chrome, если вы нажмете достаточно быстро, вы можете сделать 10 кликов и выполнить только одну функцию.
Firefox работает нормально.
источник
Во-первых,
href
лучше всего использовать URL-адрес, поскольку он позволяет пользователям копировать ссылки, открывать другие вкладки и т. Д.В некоторых случаях (например, на сайтах с частыми изменениями HTML) привязывать ссылки при каждом обновлении нецелесообразно.
Типичный метод связывания
Нормальная ссылка:
И как-то так для JS:
Преимущества этого метода - чистое разделение разметки и поведения, и не нужно повторять вызовы функций в каждой ссылке.
Метод без привязки
Однако, если вы не хотите связываться каждый раз, вы можете использовать onclick и передать элемент и событие, например:
И это для JS:
Преимущество этого метода заключается в том, что вы можете загружать новые ссылки (например, через AJAX) в любое время, не беспокоясь о привязке каждый раз.
источник
источник
Мне показалось, что javascript: hrefs не работал, когда страница была встроена в функцию веб-страницы Outlook, где вместо почтовой папки вместо URL отображается URL-адрес.
источник