Що робить вираження href <a href=діяjavascript: ;|> </a>?


228

Я час від часу бачив наступний href, який використовується на веб-сторінках. Однак я не розумію, що це намагається зробити чи техніку. Чи може хтось детальніше просити?

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

2
Ви можете закликати метод JS за допомогою цього, якщо я не помиляюся .. javascript: SomeFunction ()
Роб

1
Це не намагається зробити щось, що не може бути краще впоратися з належним обробником кліків. Вам слід уникати цього, оскільки це некрасиво, недоступно і змусило людей використовувати javascript:схему там, де його не слід використовувати ( onclick="javascript:…")
Гарет

2
Перевірте це: stackoverflow.com/a/138233/908879
ajax333221

Відповіді:


247

<a>Елемент є неприпустимою HTML , якщо він не має або hrefабо nameатрибут.

Якщо ви хочете, щоб воно відображалось правильно у вигляді посилання (тобто підкреслено, вказівник руки тощо), це зробить це лише у тому випадку, якщо він має hrefатрибут.

Таким чином, такий код іноді використовується як спосіб створення посилання, але без необхідності вказувати фактичну URL-адресу в hrefатрибуті. Розробник, очевидно, хотів, щоб сама посилання нічого не робила, і це було найпростішим способом, який він знав.

Він, мабуть, має якийсь код події javascript у іншому місці, який спрацьовує при натисканні на посилання, і це саме те, що він хоче насправді статися, але він хоче, щоб він виглядав як звичайне <a>посилання тегів.

Деякі розробники використовують href='#'з тією ж метою, але це призводить до того, що браузер переходить на верхню частину сторінки, що може не хотіти. І він не міг просто залишити href порожнім, оскільки href=''це посилання назад до поточної сторінки (тобто це викликає оновлення сторінки).

Існують способи навколо цих речей. Використання порожнього біта коду Javascript у програмі hrefє одним із них, і хоча це не найкраще рішення, воно працює.


16
З цікавості, чи є кращий спосіб зробити це?
Рахман Калфане

28
краще це робити, якщо функція події виконує return false;або event.preventDefault()тоді hrefдія ніколи не буде викликана, тож ви можете помістити щось більш розумне.
Спудлі

6
<a>Без hrefабо nameне інвалід; це можна легко перевірити за допомогою валідатора.
Jukka K. Korpela

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>елемента, а а <div>та надання бажаного стилю, що нагадує посилання.


13
Мені також подобається не визначений якір. Однак ще один недолік полягає в тому, що він додає якір до історії вашого браузера, тому я вирішив використовувати пустий метод JS в ОП.
Джон Рейд

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

це лише скорочення для:

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

3
Вигляд, але це не справжнє порівняння "на зразок подобається". Що є причиною того, що деякі потрапляють в пастку в першу чергу.
Ланкімарт

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але не як URL-адреса javascript.

Таким чином, це вибір між написанням педантично відповідного стандарту коду, який передбачає необхідність вручну коригувати виклик для кожного гіперпосилання, або трохи нестандартний код, який можна записати один раз і використовувати скрізь.


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-коди туди, а не лише викликати функції.


Тестовано в хромованій версії 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.