воскресенье, 27 ноября 2016 г.

Правильный способ сделать кнопку ссылкой

Иногда возникает задача оформить ссылку как стандартную кнопку. В общем случае так делать нежелательно: ссылка по определению просто указывает на определённый ресурс, в то время как нажатие кнопки обычно инициирует некоторое действие. Но если задача возникла, то имеет смысл хотя бы делать это правильно.

Правильно

Синтаксически правильное («валидное») и кроссбраузерное решение состоит в том, чтобы заключить кнопку в простейшую форму. Кнопке при этом следует добавить атрибут type="submit", чтобы её нажатие инициировало отправку формы (в современных браузерах и IE8+ атрибут необязателен), а в атрибут action формы — поместить URL-адрес, на который должна вести «кнопка-ссылка»:
<form action="/example/">
    <button type="submit">Кнопка-ссылка</button>
</form>
«Кнопка-ссылка» из данного примера ведёт на страницу с адресом /example/.

Строка запроса

Строка запроса представляет собой GET-параметры в виде пар имя=значение, фигурирующие в URL-адресе после первого вопросительного знака.
Если URL-адрес, на который должна указывать ссылка, содержит строку запроса, то следует для каждого из GET-параметров добавить в форму скрытое поле с соответствующими атрибутами name и value:
<form action="/example/">
    <input type="hidden" name="foo"   value="bar" />
    <input type="hidden" name="lorem" value="ipsum" />
    <button type="submit">Кнопка-ссылка</button>
</form>
Данная форма ведёт на страницу /example/?foo=bar&lorem=ipsum.

Chromium/Blink и WebKit

В браузерах на основе движков Chromium / Blink (Chrome, Opera 15+, Яндекс.Браузер, Vivaldi) и WebKit (Safari) есть баг (12), из-за которого вопросительный знак, отделяющий строку запроса от основной части адреса, добавляется к адресу даже в случае отсутствия полей в форме. Поэтому, например, форма:
<form action="/example/">
    <button type="submit">Кнопка-ссылка</button>
</form>
приведёт на адрес /example/? вместо правильного /example/.
Обойти это можно, настроив автоматическое серверное перенаправление (редирект) с URL-адреса, оканчивающегося вопросительным знаком, на такой же URL-адрес без воспросительного знака.

Неправильно

Кнопка внутри ссылки

Нередко встречается решение «в лоб», состоящее в том, чтобы просто поместить элемент BUTTON внутрь ссылки:
<a href="/example/"><button>Кнопка-ссылка</button></a>
Но, во-первых, согласно HTML5 такое решение синтаксически некорректно («невалидно»): ссылка не должнасодержать интерактивные элементы; во-вторых, такая ссылка не будет работать в Internet Explorer (IE) ниже 9-й версии.

Кнопка с JS-обработчиком щелчка

Порой используется кнопка с JavaScript-обработчиком события щелчка:
<button onclick="location.href = '/example/'">Кнопка-ссылка</button>
Но и это решение имеет серьёзные недостатки:
  • не работает при выключенном JavaScript;
  • возможны проблемы с индексацией поисковиками, не исполняющими JavaScript-код.

0 коммент.:

Отправить комментарий