Что делает выражение href <a href= Организацииjavascript:;oted> </a>?


228

Я видел следующий href, используемый время от времени на веб-страницах. Тем не менее, я не понимаю, что это пытается сделать или техника. Может кто-нибудь уточнить, пожалуйста?

<a href="javascript:;"></a>

2
Вы можете вызвать метод JS с этим, если я не ошибаюсь .. javascript: SomeFunction ()
— Rob

1
Он не пытается сделать что-то, что не может быть лучше обработано с помощью соответствующего обработчика кликов. Вам следует избегать этого, потому что это уродливо, недоступно и заставляет людей использовать javascript:схему там, где ее не следует использовать ( onclick="javascript:…")
— Гарет

2
Проверьте это: stackoverflow.com/a/138233/908879
— ajax333221

Ответы:


247

<a>Элемент является недопустимой HTML , если он не имеет либо hrefили nameатрибут.

Если вы хотите, чтобы он правильно отображался как ссылка (то есть подчеркнутый, указатель руки и т. Д.), Он будет делать это только в том случае, если у него есть hrefатрибут.

Поэтому подобный код иногда используется для создания ссылки, но без hrefуказания фактического URL-адреса в атрибуте. Разработчик, очевидно, хотел, чтобы сама ссылка ничего не делала, и это было самым простым способом, который он знал.

У него, вероятно, есть какой-то код события javascript в другом месте, который срабатывает при нажатии на ссылку, и это именно то, чего он хочет на самом деле, но он хочет, чтобы он выглядел как обычная <a>ссылка тега.

Некоторые разработчики используют href='#'для той же цели, но это заставляет браузер переходить к началу страницы, что может быть нежелательно. И он не мог просто оставить href пустым, потому что href=''это ссылка на текущую страницу (т.е. она вызывает обновление страницы).

Есть способы обойти эти вещи. Использование пустого фрагмента кода Javascript в hrefявляется одним из них, и хотя это не лучшее решение, оно работает.


16
Из любопытства, есть ли лучший способ сделать это?
— Рахман Калфане

28
лучше было бы сделать это, если функция события делает это, return false;или event.preventDefault()тогда hrefдействие никогда не будет вызвано, так что вы можете добавить туда что-то более разумное.
— Спадли

6
<a>Без hrefили nameне инвалид; это можно легко проверить с помощью валидатора.
— Юкка К. Корпела

2
Фрагмент (раздел #) никогда не следует отправлять на веб-сервер в соответствии со спецификацией, поэтому, скорее всего, ваш браузер что-то делает не так.
— Джошуа Уолш

2
Да к тому, что сказал @YoshieMaster. Если URL содержит # фрагмент , он никогда не отправляется на веб-сервер (или, следовательно, на брандмауэр); он используется только внутри браузера. В этом случае нажатие на ссылку, помеченную <a href="#">... </a>, не приведет к тому, что ваш браузер отправит какие-либо HTTP-запросы; все, что он будет делать, это прокрутить до верхней части страницы.
— Марк Рид

38

в основном, вместо использования ссылки для перемещения страниц (или якорей), использование этого метода запускает функцию (и) javascript

<script>
function doSomething() {
  alert("hello")
}
</script>
<a href="javascript:doSomething();">click me</a>

щелкнув ссылку, вы получите предупреждение.


31

Существует несколько механизмов, позволяющих избежать ссылки на место назначения. Тот из вопроса не очень интуитивно понятен.

Опция очиститель для использования , href="#no"где #noне является определен якорь в документе.

Вы можете использовать более семантическое имя, например #disable или #action, чтобы повысить удобочитаемость.

Преимущества подхода:

  • Предотвращает эффект "перемещения наверх" пустого href = "#"
  • Избегает использования JavaScript

Недостатки:

  • Вы должны быть уверены, что имя якоря не используется в документе.

Поскольку <a>элемент не действует как ссылка, лучшим вариантом в этих случаях является не использование <a>элемента, а a <div>и предоставление требуемого стиля ссылки.


13
Мне тоже нравится неопределенный якорь. Однако, другим недостатком является то, что он добавляет привязку к истории вашего браузера, поэтому я решил использовать пустой метод JS в OP.
— Джон Рейд

10
<a href="javascript:alert('Hello');"></a>

это просто сокращение для:

<a href="" onclick="alert('Hello'); return false;"></a>

3
Вроде, но это не настоящее сравнение типа «нравится как». Что является причиной того, что некоторые попадают в ловушку использования его в первую очередь.
— Lankymart

9

Это способ заставить ссылку ничего не делать при нажатии (если с ней не связаны события Javascript).

Это способ запуска Javascript вместо перехода по ссылке:

<a href="Javascript: doStuff();">link</a>

Когда на самом деле нет JavaScript для запуска (как в вашем примере), он ничего не делает.


Ах я вижу. Это эффективно отключает ссылку.
— Джон Ливермор

9

Обратитесь к этому:

<a href="Http://WWW.stackoverflow.com">Link to the website opened in different tab</a>
<a href="#MyDive">Link to the div in the page(look at the chaneged url)</a>
<a href="javascript:;">Nothing happens if there is no javaScript to render</a>

4
<a href="javascript:void(0);"></a>

javascript: говорит браузеру писать код JavaScript


3

Старый поток, но я хотел бы просто добавить, что разработчики используют эту конструкцию не для того, чтобы создать неработающую ссылку, а потому, что URL-адреса javascript по какой-то причине неправильно передают ссылки на активный элемент html.

Например, handler_function(this.id)работает как, onClickно не как JavaScript-URL.

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


2

Поэтому он используется для написания js-кодов внутри, hrefа не для прослушивателей событий, таких как ссылки, onclickи позволяет избегать #ссылок, hrefчтобы сделать aтеги действительными для html.

У меня было исследование о том, как использовать javascript:внутри hrefатрибута.

<a href="
     javascript:
        a = 4;
        console.log(a++); 
        a += 2; 
        console.log(a++); 
        if(a < 6){ 
            console.log('a is lower than 6');
        } 
        else 
            console.log('a is greater than 6');
        function log(s){
            console.log(s);
        }
        log('function inplimentation working too');

">Click here</a>

С помощью этого кода вы даже можете писать там js-коды, а не только вызывать функции.


Протестировано в chrome версии 68.0.3440.106 (Официальная сборка) (64-битная версия)

Протестировано в Firefox Quantom 61.0.1 (64-битная версия)


-4

Лучший способ всегда правильно отобразить ссылку - использовать css следующим образом:

a {cursor: pointer !important}

Следует избегать ненужных вещей, упомянутых в ветке.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.