Я видел два метода установки атрибута действия формы.
# 1. Пустой атрибут действия:
action=""
# 2. Атрибут Action с #
:
action="#"
Каковы различия между ними?
Первый (""
) разрешает базовый URL-адрес, а второй (#
) разрешает URL-адрес документа.
Вполне справедливо следующее:
<form action="" method="post">
<p><input type="submit"/></p>
</form>
Теперь остерегайтесь, согласно спецификации HTML4, атрибут action
является обязательным, и он должен содержать допустимый URI. Но согласно URI RFC, пустой URI по-прежнему является URI:
Ссылка на URI, которая не содержит URI, является ссылкой на текущий документ. Другими словами, пустая ссылка URI в документе интерпретируется как ссылка на начало этого документа, а ссылка, содержащая только идентификатор фрагмента, является ссылкой на идентифицированный фрагмент этого документа. Обход такой ссылки не должен приводить к дополнительному поисковому действию. Однако, если ссылка URI встречается в контексте, который всегда предназначен для создания нового запроса, как и в случае элемента HTML FORM, тогда пустая ссылка URI представляет базовый URI текущего документа и должна быть заменена этим URI при преобразовании в запрос.
(выдержка из этой страницы)
Хотя это является обязательным, большинство, если не все браузеры, отправят обратно отправителю ответа, если не указан атрибут действия.
А в HTML5 атрибут action
не является обязательным. Из спецификаций:
Атрибуты контента action и formaction, если они указаны, должны иметь значение, которое является допустимым непустым URL, потенциально окруженным пробелами.
Связанный:
Первый разрешает URL-адрес текущей страницы *
(сохраняя идентификатор фрагмента в URL-адресе, и вы также можете полностью опустить атрибут action
), а другой - в начало страницы (удаляя уже существующий там идентификатор фрагмента).
*
Учитывая нормальное разрешение URL, я думаю, что он будет разрешен к последнему /
перед строкой запроса и идентификатором фрагмента в URL-адресе текущей страницы, но здесь в случае особых случаев HTML 5 пустые строки (шаг 8) (предположительно для обратной совместимости, поскольку большинство браузеров реализовали его таким образом исторически).