Сделайте HTML-ссылку, которая ничего не делает (буквально ничего)

87

Мне нужна ссылка, которая ничего не делает. Я не хочу этого:

<a href="#">

потому что тогда URL-адрес становится something.com/whatever/#.

Единственная причина, по которой мне нужна ссылка, - это чтобы пользователь мог видеть, что он может щелкнуть текст. JavaScript используется для выполнения некоторых действий, поэтому мне не нужно никуда идти по ссылке, но мне нужно, чтобы она выглядела как ссылка!

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

эль
источник
Что не так something.com/whatever/#?
Чарльз Спрейберри
1
вы можете дать ему пустое поле href и вернуть false в javascript. Но это будет более семантическим, если вы просто измените свойство курсора на pointerв своем CSS
JohnP
@CharlesSprayberry: Есть ситуации, в которых вы этого не хотите.
PeeHaa
Это хороший вопрос, который можно задать и на ux.stackexchange.com .
1
Этот вопрос обсуждается более подробно здесь: stackoverflow.com/questions/134845/…
DawnPaladin

Ответы:

124

Следующее предотвратит запуск вашего href

<a href="#" onclick="return false;">

Если вы используете jQuery, event.preventDefault()можно использовать

Курт
источник
Вызывает отмену дополнительных событий onclick.
Раули Раджанде
5
Заставляет страницу прокручиваться вверх.
Дэвид Хемпи
@DavidHempy Я этого не испытываю. Какой браузер?
Курт
1
@curt Google Chrome, версия 63.0.3239.84 (официальная сборка) (64-разрядная версия) (или, возможно, немного более старая версия, две недели назад)
Дэвид Хемпи,
Это не работает для прокрутки плагина wordpress до id, и ссылка все равно что-то сделает. В этом случае это будет глючная штука, которая перенаправит вас вверх страницы.
Иржи Отупал イ り オ ト ウ パ ー
88

Попробуй это:

<a href="javascript:void(0);">link</a>
алексдец
источник
4
+1 но быстрый вопрос: есть ли разница между javascript:voidи javascript:void(0)?
Adam Rackis
3
Если вы попробуете использовать javascript: void (0) без param, у вас будет SyntaxError, и все ваши скрипты будут неудачными.
alexdets
3
@alexdets javascript:void()будет SyntaxError, но javascript:voidпросто вернет undefined - так же, как void(0). Адам, насколько я могу судить, voidи void(0)функционально эквивалентны для такого использования. --- изменить: хотя я вижу другие комментарии, которые намекают, что страница может быть перезагружена ..
andytuba
3
Имеет ли значение, как вы используете javaScript / javascript / JavaScript / Javascript?
Тим Трастон
2
@TechyTimo Нет, заглавные буквы не имеют значения, на самом деле они не должны быть заглавными. Я отправил правку.
Weston Ganger
28

В HTML5 это очень просто. Просто опустите hrefатрибут.

<a>Do Nothing</a>

Из MDN в атрибуте href тега :

href

Это был единственный обязательный атрибут для якорей, определяющих ссылку на гипертекстовый источник, но он больше не требуется в HTML5.


А как насчет курсора в виде руки при наведении?

Стили по умолчанию для браузера могут не заменять курсор на указатель, для aтегов без href. Вы можете универсально изменить это с помощью следующего CSS.

a {
    cursor: pointer;
}
<a>Do Nothing</a>

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


Как насчет того, чтобы сделать его ориентированным на вкладки?

Просто добавь tabindex="0"к элементу.

<a tabindex="0">Do Nothing</a>


Есть ли смысл использовать aтег без ссылки?

Обычно нет, вероятно, лучше использовать buttonвместо этого элемент и стилизовать его с помощью CSS. Но что бы вы ни использовали, избегайте использования произвольных элементов, например, divкогда это возможно, поскольку это вообще не семантически.

Александр О'Мара
источник
1
При начальной загрузке 4 ссылки, у которых нет href, не оформляются как ссылки.
user3413723
13

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

p.not-a-link { text-decoration: underline; cursor: pointer } 

Или еще лучше просто сделайте это ссылкой и позвольте функции javascript, которая используется e.preventDefault()для предотвращения ссылки.

Также добавьте ссылку в, hrefчтобы пользователи без включенного JS могли ее использовать (в качестве запасного варианта).

PeeHaa
источник
1
+1 После завершения дебатов по IE5.5, будет ли span лучше, чем ap?
amelvin
1
Я предпочитаю спан. P мог бы устроить новый скандал, а span
Ронни Остинг
9

<a href="javascript:;">Link text</a> - вот что я обычно использую

Скотт Браун
источник
5
Разве это не перезагрузит страницу в некоторых браузерах?
Курт
@Curt: Ты прав, неправильно прочитал вопрос. Вы получили за это комментарий :-)
Скотт Браун
... и я получил 2 отрицательных голоса, в том числе один после редактирования! Сурово!
Скотт Браун
Удалите первый код, тогда мне будет разрешено удалить мой голос против :) Он не позволит мне удалить голос против, он «заблокирован»
Курт
1
На какие браузеры это влияет, это все еще проблема? Это было бы предпочтительнее void(0), потому что оно отображается в строке состояния. Я говорю это, потому что пользователи отмечают это как ошибку / ошибку (что, очевидно, не так), поэтому я думаю, что это их сбивает с толку.
chunk_split 03
4

Мы можем добиться этого с помощью javascript void, который обычно включает оценку выражения и возврат undefined, что включает добавление javascript:void(0);в href.

Оператор void обычно используется только для получения неопределенного примитивного значения, обычно с использованием «void (0)» (что эквивалентно «void 0»). В этих случаях вместо нее можно использовать глобальную переменную undefined (при условии, что ей не присвоено значение, отличное от значения по умолчанию).

a {
  text-decoration: initial;
}
<a href="javascript:void(0);"> This link actually does nothing when clicked</a>

Krafty Coder
источник
2

Ответ @ Curt будет работать, но вы можете использовать стиль курсора в css, чтобы он выглядел как ссылка, не беспокоясь о создании поддельной ссылки. Используйте руку или указатель в зависимости от соответствия браузеру.

Кроссбраузерный указатель css (из руководства по стилю курсора ):

element {
    cursor: pointer;
    cursor: hand;
}
Амельвин
источник
@PeeHaa Просто используйте указатель, только если вы не хотите, чтобы он работал в IE5.5 и ранее!
amelvin
3
Это то, что я сказал! Пожалуйста, не упоминайте IE5.5: P Если серьезно, то IE5.5 - это 0.17%. Если люди все еще используют эту версию, они не заслуживают просмотра веб-страниц
PeeHaa
2

один из способов, о котором никто не упомянул, - это указать href на пустое локальное местоположение файла, например

<a href='\\'>my dead link</a>

Зачем? Если вы используете фреймворк, такой как react или angular, компилятор выдаст некоторые предупреждения, которые могут испортить ваш журнал или консоль. Этот метод также предотвратит неправильное связывание объектов роботами или пауками.

1-14x0R
источник
-1

НЕ ИСПОЛЬЗУЙТЕ <a>... вместо этого используйте, <span class='style-like-link'> а затем используйте класс, чтобы стилизовать его, как хотите.

Брайс
источник
Там ничего плохого с использованием тега привязки без самой ссылки, не говоря уже о том , что есть много случаев , когда было бы сделать гораздо больше смысла , чтобы сделать это, а не заменить его псевдо-тег привязки. Не говоря уже о стилизации одного элемента, чтобы он выглядел как другой, но реализовывался по-другому, неизбежно вызовет проблемы с обслуживанием в будущем
Тим
Согласовано. Это полностью зависит от варианта использования и того, чего вы пытаетесь достичь. Я просто предоставил это как ответ, чтобы помочь другим узнать, что это вариант AN.
Bryce
Если это так, я бы предложил отредактировать его, чтобы использовать язык, который показывает, что это возможная альтернатива, вместо того, чтобы указывать заглавными буквами не использовать для этого стандартный тег привязки, когда это вполне допустимо
Тим,