Как настроить смартфоны и ПК. Информационный портал

HTML5: атрибут формы required.

Перевод: Влад Мержевич

Каждый знает о веб-формах, не так ли? Вставляем тег , несколько , может быть , завершаем это все кнопкой и готово.

Вы не знаете и половины об этом. HTML5 определяет более десятка новых типов полей, которые вы можете использовать в своих формах. И когда я говорю «использовать», я имею в виду что их можно использовать прямо сейчас - без каких-либо прокладок, хаков или обходных путей. Не волнуйтесь сильно, я не хочу сказать, что все эти новые захватывающие возможности на самом деле поддерживаются в любом браузере. Совершенно нет, я не имею в виду, что всеми. В современных браузерах, да, ваши формы покажут все, на что они способны. Но в старых браузерах ваши формы по-прежнему будут работать, хотя и не в полной мере. То есть эти возможности элегантно деградируют в каждом браузере. Даже в IE6.

Подсказывающий текст Поддержка подсказывающего текста
IE Firefox Safari Chrome Opera iPhone Android
- 4.0+ 4.0+ 4.0+ 11.0+ 4.0+ -

Первое улучшение HTML5 относительно форм это возможность установки подсказывающего текста в поле ввода. Такой текст отображается в поле ввода, если поле пустое и у него нет фокуса. Как только вы щелкните в поле ввода (или перейдете к нему через Tab ) подсказывающий текст исчезает.

Вы, наверное, видели подсказывающий текст ранее. Например, Mozilla Firefox включает подсказывающий текст в адресной строке с надписью «Поиск в закладках и журнале».

Когда вы щелкаете по адресной строке, подсказывающий текст исчезает.

Вот как вы можете включить подсказывающий текст в свои формы.




Браузеры, которые не поддерживают атрибут placeholder , его просто игнорируют. Без вреда и нарушений.

Спроси профессора Маркапа

☞ В. Могу я использовать HTML разметку для атрибута placeholder ? Я хочу вставить картинку или, может, изменить цвета.

О. Атрибут placeholder может содержать только текст, никакого HTML-кода. Однако есть специальные расширения CSS, которые позволяют вам установить стиль текста в некоторых браузерах.

Поля с автофокусом Поддержка автофокуса
IE Firefox Safari Chrome Opera iPhone Android
- - 4.0+ 3.0+ 10.0+ - -

Сайты могут использовать JavaScript для автоматического получения фокуса в первом поле формы. К примеру, на главной странице Google.com автофокус есть у поля для ввода поисковых ключевых слов. Хотя это и удобно для большинства людей, но может раздражать опытных пользователей и людей с особыми потребностями. Если вы нажмете пробел в ожидании прокрутки страницы, прокрутки не будет, потому что фокус находится в поле ввода формы (будет набираться пробел в поле вместо прокрутки). Если вы перевели фокус на другое поле ввода, пока страница загружается, скрипт автофокуса на сайте может «услужливо» переместить фокус обратно на исходное поле ввода, прерывая ваш набор и заставляя вводить текст в неверном месте.

Поскольку автофокус работает через JavaScript, могут быть сложности для обработки этих крайних вариантов и мало возможностей для тех людей, которые не хотят, чтобы веб-страница «похищала» их фокус.

Для решения этих проблема HTML5 вводит атрибут autofocus для всех элементов форм. Атрибут autofocus делает именно то, как и звучит: как только страница загружается, перемещает фокус в указанное поле. Но поскольку это всего лишь разметка, а не сценарий, поведение будет постоянным для всех сайтов. Кроме того, производители браузеров (или авторы расширений) могут предложить пользователям способ отключить автофокус.

Вот как вы можете установить поле формы с автофокусом.




Браузеры, которые не поддерживают атрибут autofocus , будут его игнорировать.

Что такое? Говорите, что желаете, чтобы автофокус работал везде, а не только в вычурных HTML5-браузерах? Вы можете оставить текущий скрипт с автофокусом, просто сделайте два небольших изменения:

  • добавьте атрибут autofocus в код HTML;
  • проверьте, поддерживает ли браузер атрибут autofocus , и если нет, запустите собственный скрипт.

Автофокус с альтернативой




if (!("autofocus" in document.createElement("input")) ) {
document.getElementById("q").focus();
}


Устанавливайте фокус как можно раньше

Многие веб-страницы ждут, пока сработает window.onload и устанавливают фокус. Но событие window.onload не сработает, пока все изображения не загрузятся. Если на вашей странице много изображений, такие наивные скрипты потенциально изменят фокус после того, как пользователь начал взаимодействовать с другой частью вашей страницы. Вот почему опытные пользователи ненавидят скрипты автофокуса.

Например, в предыдущем разделе скрипт автофокуса размещен сразу после поля формы, на который он ссылается. Это оптимальное решение, но оно может оскорбить ваши чувства ставить блок кода JavaScript в середине страницы (или более приземлено, ваша система может быть не настолько гибкой). Если вы не можете вставить скрипт в середине страницы, вы должны установить фокус через пользовательское событие, как $(document).ready() в jQuery вместо window.onload .

Автофокус через jQuery




$(document).ready(function() {

$("#q").focus();
}
});






Пользовательское событие jQuery срабатывает, как только DOM доступен - то есть ждет, пока загрузится текст страницы, но не ждет, пока все изображения загрузятся. Это не оптимальный подход - если страница необычно большая или сетевое соединение медленное, пользователь может по-прежнему взаимодействовать со страницей перед тем, как выполнится скрипт с фокусом. Но все же это намного лучше, чем ждать, пока произойдет событие window.onload .

Если вы согласны и готовы вставить скрипт с одним оператором в код вашей страницы, это компромисс, который менее противный, чем первый вариант и лучше чем второй. Вы можете использовать пользовательские события jQuery для задания собственных событий, скажем autofocus_ready. Тогда вы можете вызывать это событие вручную, сразу после доступности поля с автофокусом. Спасибо Е. М. Штенбергу за обучение меня этой технике.

Автофокус с альтернативным пользовательским событием




$(document).bind("autofocus_ready", function() {
if (!("autofocus" in document.createElement("input"))) {
$("#q").focus();
}
});





$(document).trigger("autofocus_ready");

Это решение оптимальное, как и первый подход. Фокус будет установлен в поле формы, как только это станет технически возможно, в то время как текст страницы все еще грузится. Часть логики приложения (фокус в поле формы) перенесена из тела страницы в раздел . Этот пример основан на jQuery, но концепция пользовательских событий не является уникальной для jQuery. Другие JavaScript-библиотеки вроде YUI и Dojo предлагает аналогичные возможности.

Подведем итоги.

  • Правильная установка фокуса это важно.
  • Если это возможно, пусть браузер использует атрибут autofocus в том поле, где вы желаете фокус.
  • Если вы используете альтернативный код для старых браузеров, определяйте поддержку атрибута autofocus , чтобы скрипт выполнялся только в старых браузерах.
  • Устанавливайте фокус как можно раньше. Вставьте скрипт с фокусом в код сразу же после поля формы. Если это не задевает вас, вставьте JavaScript-библиотеку, которая поддерживает пользовательские события, и вызывайте событие в коде сразу же после поля формы. Если это невозможно, используйте событие вроде $(document).ready() из jQuery.
  • Ни при каких обстоятельствах не ждите, пока window.onload установит фокус.
Адреса электронной почты

Уже более десяти лет формы содержат всего несколько видов полей. Наиболее распространенные следующие.

Все эти типы полей по-прежнему работают в HTML5. Если вы «обновитесь до HTML5» (возможно сменой !DOCTYPE ), вам не придется делать ни единого изменения в ваших формах. Ура обратной совместимости!

Однако HTML5 определяет 13 новых типов полей и нет никаких причин не начать их использовать.

Первый из этих новых типов адрес электронной почты. Выглядит примерно так.





Я собирался написать предложение, которое началось «в браузерах, которые не поддерживают type="email" ...», но остановился. Почему? Потому что не уверен, что браузеры не поддерживают type="email" . Все браузеры «поддерживают» type="email" . Они могут не делать нечто специальное, но браузеры, которые не распознают type="email" будут относиться к нему как type="text" и отобразят как обычное текстовое поле.

Я подчеркну насколько это важно. В Интернете миллионы форм, которые просят ввести адрес электронной почты и все из них используют . Вы видите текстовое поле, вводите свой адрес электронной почты в него и все тут. И вот появляется HTML5, который определяет type="email" . Браузеры сходят с ума? Нет. Каждый браузер на Земле воспринимает неизвестный атрибут type как type="text" - даже IE6. Так что вы можете «обновить» ваши формы используя type="email" прямо сейчас.

Что случится, если скажем, браузер поддерживает type="email" ? Ну, это может означать что угодно. Спецификация HTML5 не требует какого-либо конкретного пользовательского интерфейса для новых типов полей. Опера дополняет поле формы небольшой иконкой. Другие HTML5-браузеры как Safari и Chrome отображают как текстовое поле - такое же, как type="text" - так что ваши пользователи не заметят разницу (пока не посмотрят исходный код).

И еще есть iPhone.

iPhone не имеет физической клавиатуры. Весь «набор» осуществляется нажатием по экранной клавиатуре, всплывающей в соответствующее время, например, когда вы перешли в поле формы на веб-странице. Apple сделал нечто хитрое в браузере iPhone-а. Он распознает некоторые новые поля HTML5 и динамически меняет экранную клавиатуру для оптимизации ввода.

К примеру, адрес электронной почты это текст, правильно? Конечно, но это особый вид текста. Так, практически все адреса электронной почты содержат символ @ и, по крайней мере, одну точку (.), но они вряд ли содержат пробел. Поэтому, когда вы используете iPhone и переходите к элементу , вы получите экранную клавиатуру, которая содержит пробел меньше обычного, а также выделенные клавиши для символов. и @.

Подведу итог. Нет никаких недостатков для немедленного перевода всех ваших полей с электронными адресами в type="email" . Практически никто этого не заметит, кроме пользователей iPhone, которые, вероятно, тоже этого не заметят. Но те, кто заметят, тихо улыбнутся и поблагодарят вас за то, что их работа стала немного легче.

Веб-адреса

Веб-адрес - которые зубрилы стандартов называли URL, за исключением нескольких педантов, которые называли URI - это еще один тип специализированного текста. Синтаксис веб-адреса ограничивается соответствующим стандартом Интернет. Если кто-то просит вас ввести веб-адрес в форму, он ожидает что-то вроде «http://www.google.com/», а не «125 Фарвуд Роуд». Косые линии являются общими - даже у главной страницы Google их три. Точки также распространены, но пробелы запрещены. И каждый веб-адрес имеет суффикс домена как «.com» или «.org».

И вот... (барабанная дробь, пожалуйста)... . На iPhone это выглядит следующим образом.

iPhone изменил свою виртуальную клавиатуру, как это сделал для адреса электронной почты, но теперь оптимизировал ее для набора веб-адреса. Пробел полностью заменен тремя виртуальными клавишами: косая линия, точка и «.com» (вы можете удерживать нажатой клавишу «.com», чтобы выбрать другой суффикс вроде «.org» или «.net»).

Браузеры, которые не поддерживают HTML5, будут относиться к type="url" как к type="text" , так что нет недочетов по использованию этого типа для всех полей, где нужно вводить веб-адрес.

Числа как счетчики

Следующий шаг: числа. Запрос числа более сложен, чем запрос адреса электронной почты или веб-адреса. Прежде всего, числа сложнее, чем вы думаете. Быстро выберите число. -1? Нет, я имел в виду число между 1 и 10,7 ½? Нет, нет, не дробь, тупица. π? Теперь вы просто выбрали иррациональное число.

Хочу заметить, у вас не часто спрашивают «просто число». Более вероятно, что будут просить число в определенном диапазоне. Вы можете только захотеть, чтобы в пределах этого диапазона были определенные типы чисел - может быть, целые числа, но не дроби или десятичные числа или что-то более экзотическое, например, кратные 10. HTML5 все это охватывает.

Выбрать число, почти любое

Рассмотрим по одному атрибуту.

  • type="number" означает, что это числовое поле.
  • min="0" указывает минимально допустимое значение для этого поля.
  • max="10" является максимально допустимым значением.
  • step="2" в сочетании с минимальным значением определяет допустимые числа в диапазоне: 0, 2, 4 и так далее, вплоть до максимального значения.
  • value="6" значение по умолчанию. Должно выглядеть знакомым, этот же атрибут всегда используется для определения значений полей формы. Я упоминаю здесь об этом для отправной точки, что HTML5 основывается на предыдущих версиях HTML. Вам не нужно переучиваться, чтобы делать то, что вы уже делали.

Это код числового поля. Имейте в виду, что все эти атрибуты являются необязательными. Если у вас задан минимум, но не максимум, можете указать атрибут min , но не max . По умолчанию значение шага равно 1 и вы можете опустить атрибут step , пока не понадобится другое значение шага. Если нет значения по умолчанию, то атрибут value может быть пустой строкой или даже вообще опущен.

Но HTML5 не останавливается на достигнутом. За ту же самую низкую, низкую цену свободы вы получаете эти удобные методы JavaScript.

  • input.stepUp(n) повышает значение поля на n.
  • input.stepDown(n) понижает значение поля на n.
  • input.valueAsNumber возвращает текущее значение как число с плавающей точкой (свойство input.value это всегда строка).

Проблемы с отображением? Ну, правильный интерфейс по управлению числами в браузерах реализован по-разному. На iPhone, где набор имеет сложности, браузер опять оптимизирует виртуальную клавиатуру для ввода чисел.

В настольной версии Оперы поле type="number" отображается как счетчик с небольшими стрелками вверх и вниз, которые можно нажать для изменения значений.

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

Как и со всеми другими полями ввода, что я обсуждал в этой главе, браузеры, которые не поддерживают type="number" , будут относиться к нему как к type="text" . Значение по умолчанию будет отображаться в поле (так как оно хранится в атрибуте value ), но другие атрибуты, такие как min и max будут игнорироваться. Вы можете свободно реализовать их самостоятельно или использовать JavaScript-фреймворк, который уже реализует управление счетчиком. Вначале проверьте , как здесь.

if (! .inputtypes.number) {
// нет встроенной поддержки для поля type=number
// может попробовать Dojo или другой JavaScript-фреймворк
}

Числа в виде ползунка

Счетчик не единственный способ представления ввода чисел. Вы, наверное, также видели ползунок, который выглядит так.

Теперь вы также можете иметь ползунок в форме. Код выглядит странно похожим на поле счетчика.


Все доступные атрибуты такие же, как и у type="number" - min , max , step , value - и означают то же самое. Единственное отличие состоит в пользовательском интерфейсе. Вместо поля для ввода, браузеры, как ожидается, отображают type="range" в виде ползунка. На момент написания последние версии Safari, Chrome и Opera работали с этим. К сожалению, iPhone отображает в виде простого текстового поля, он даже не оптимизирует свою экранную клавиатуру для ввода чисел. Все остальные браузеры просто рассматривать поле как type="text" , поэтому нет никаких причин начать использовать этот тип немедленно.

HTML 4 не включает выбор даты через календарь. JavaScript-фреймворки позволяют это обойти (Dojo , jQuery UI , YUI , Closure Library), но, конечно, каждое из этих решений требует «внедрения» фреймворка для любого встроенного календаря.

HTML5, наконец, определяет способ включить встроенный выбор даты без всяких скриптов. В действительности, их шесть: дата, месяц, неделя, время, дата + время и дата + время с часовым поясом.

Пока поддержка... скудна.

Поддержка выбора даты Тип Opera Другие браузеры
type="date" 9.0+ -
type="month" 9.0+ -
type="week" 9.0+ -
type="time" 9.0+ -
type="datetime" 9.0+ -
type="datetime-local" 9.0+ -

Вот как Opera отображает :

Если вам нужно время вместе с датой, Opera также поддерживает :

Если вам нужен месяц плюс год (например, срок действия кредитной карты), Opera может отобразить :

Менее распространенным, но доступным является выбор недели в году через :

Последнее, но не менее важное, это выбор времени с :

Выбор даты с альтернативой




...

var i = document.createElement("input");
i.setAttribute("type", "date");
if (i.type == "text") {
// Нет встроенной поддержки выбора даты:(
// Используйте Dojo/jQueryUI/YUI/Closure для ее создания,
// затем динамически замените элемент
}

Вероятно, другие браузеры в конечном итоге будут поддерживать эти типы. Подобно type="email" и другим типам, эти поля формы будут отображаться в виде обычного текста в тех браузерах, которые не распознают type="date" и его варианты. Если вы хотите, то можете просто использовать , чем сделаете пользователей Opera счастливыми, и подождите, пока другие браузеры наверстают упущенное. Более реально это использовать , но проверить, имеет ли браузер встроенную поддержку выбора даты, и включить альтернативное решение в виде скрипта по вашему выбору (Dojo , jQuery UI , YUI , Closure Library или другие варианты).

Окно поиска

Итак, поиск. Не только поиск от Google или Yahoo (ну, те тоже). Подумайте о любом окне поиска, на любой странице, на любом сайте. Амазон имеет окно поиска, Яндекс имеет окно поиска, большинство блогов тоже. Как они сделаны? , как и любое другое текстовое поле в сети. Давайте это исправим.

Поиск нового поколения




В некоторых браузерах вы не заметите никакого отличия от обычного текстового поля. Но если вы используете Safari на Mac OS X, это будет выглядеть так.

Нашли разницу? Поле ввода имеет закругленные углы! Я знаю, знаю, вы вряд ли можете сдержать свои чувства. Но подождите, это еще не все! Когда вы начнете вводить в поле type="search" Safari вставит небольшую кнопку «x» с правой стороны окна. Нажатие на «x» очищает содержимое поля. Google Chrome, который имеет под капотом ту же технологию, ведет себя так же. Обе эти маленькие хитрости выглядят и ведут себя аналогично родному поиску в iTunes и других клиентских приложениях Mac OS X.

Apple.com использует для поиска по своему сайту, чтобы помочь сайту передать «маколюбное» ощущение. Но здесь нет ничего специфичного для Маков. Это просто код, так что каждый браузер на любой платформе может выбрать, как отображать в соответствии с соглашениями платформы. Как и со всеми другими новыми типами, браузеры, которые не признают type="search" будут относиться к нему как type="text" , так что нет абсолютно никаких причин не начать использовать type="search" для всех ваших окон поиска прямо сегодня.

Профессор Маркап говорит

По умолчанию Safari не применяет к большинство стилей. Если вы хотите заставить Safari понимать поле для поиска как обычное текстовое поле (чтобы применить собственные стили), добавьте это правило к вашей таблице стилей.

input {
-webkit-appearance: textfield;
}

Спасибо Джону Лейну за обучение меня этому трюку.

Выбор цвета

HTML5 также определяет поле , которое позволяет выбрать цвет и возвращает его в шестнадцатеричном представлении. Ни один браузер выбор цвета не поддерживает, что является позором, потому что я всегда любил палитры Mac OS. Может быть, когда-нибудь.

Прим. переводчика. Opera 11 поддерживает эту возможность.

Валидация форм

В этой главе я говорил о новых элементах форм и новых возможностях, таких как автофокус, но я не упомянул, пожалуй, самую захватывающую часть форм HTML5: автоматическую проверку входных данных. Рассмотрим общие проблемы ввода адреса электронной почты в форме. Вероятно, у вас есть проверка на стороне клиента через JavaScript, после чего идет проверка на стороне сервера через PHP, Python или другой серверный язык. HTML5 никогда не сможет заменить проверку на стороне сервера, но он может когда-нибудь заменить проверку на стороне клиента.

Есть две большие проблемы, связанные с проверкой адреса электронной почты на JavaScript:

  • Некоторое количество ваших посетителей (вероятно, около 10%) не включают JavaScript.
  • Вы получите адрес неправильно.
  • Серьезно, вы получите адрес неправильно. Определение того, что набор случайных символов это корректный адрес электронной почты невероятно сложно . Чем сильнее вы смотрите, тем сложнее становится. Я уже говорил, что это очень, очень сложно ? Не проще ли повесить эту головную боль на ваш браузер?

    Opera проверяет type="email"

    Вот скриншот из Opera 11, хотя функциональность присутствует с Opera 9. Код включает в себя установку значения email для атрибута type . Когда пользователь Оперы пытается отправить форму с , браузер автоматически проверяет адрес почты, даже если скрипты отключены.

    HTML5 также предлагает проверку веб-адресов с полем и чисел с . Проверка чисел принимает во внимание значения атрибутов min и max , поэтому браузеры не позволят вам отправить форму, если вы вводите слишком большое число.

    Не существует кода, включающего проверку форм в HTML5, это делается по умолчанию. Чтобы отключить проверку, используйте атрибут novalidate .

    Не проверяй меня




    Браузеры медленно включают поддержку проверки форм в HTML5. Firefox 4 будет иметь полную поддержку. К сожалению, Safari и Chrome реализуют лишь частично: они проверяют элементы форм, но не выводят никаких видимых сообщений, когда поля формы не проходит проверку. Другими словами, если вы введете неверную (или неправильно составленную) дату в type="date" , Safari и Chrome не отправит форму, но и не будет говорить вам, почему это не сделали. Они будут устанавливать фокус на поле, которое содержит недопустимое значение, но не отображать сообщение об ошибке, как Opera или Firefox 4.

    Обязательные поля Поддержка
    IE Firefox Safari Chrome Opera iPhone Android
    - 4.0+ - - 9.0+ - -

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

    Код для обязательных полей прост, насколько это возможно.




    Браузеры могут изменить внешний исходный вид обязательного поля. Вот к примеру, как это выглядит в Mozilla Firefox 4.0.

    Кроме того, если вы пытаетесь отправить форму без заполнения обязательного значения, Firefox выведет информационную панель, говорящую, что поле является обязательным и не может быть пустым.

    Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье вы узнали о новых структурных элементах в HTML5. В данной статье я бы хотел рассказать, что нового принёс нам HTML5 при работе с формами. В первую очередь это проверка полей на соответствие некоторым условиям, без использования Javascript. Раньше мы все поля для ввода задавали тегом с атрибутом type="text" . Затем javascript’ом проверяли, чтобы поле было непустым, удовлетворяло определенным требованиями (например, e-mail пользователя). С приходом HTML5 вся эта процедура упростилась. Давайте начнём разбираться на примере. Давайте создадим форму и добавим тег с новым атрибутом type="email" (данный атрибут не даст нам отправить форму, пока не будет введен корректный адрес электронной почты):

    Формы в HTML5

    В данном случае мы указали тип поля email , и по сути, пока мы не введем корректный адрес электронной почты, форма не должна отправляться. Яндекс — браузер выводит очень интересную подсказку, когда мы вводим какую-нибудь ерунду в данное поле. Я ввел "123" и попробовал отправить. Вылезло сообщение о том, что необходим символ "@"

    Т.е. если я введу "@" , то форма у нас должна отправится. Что собственно и произошло. Поэтому данным типом поля я не рекомендую пользоваться, если только не добавить в него ещё один атрибут — pattern .

    Данный атрибут проверяет соответствие того, что мы ввели, тому что находится в pattern . Здесь необходимо знание регулярных выражений. Давайте сделаем, чтобы наша форма отправлялась только после того, как мы введем НОРМАЛЬНЫЙ адрес электронной почты, а не только строку, содержащую "@" :

    Электронная почта:

    Если вы не знаете, что такое регулярные выражения, то не беда. В одной из следующих статей они будут рассмотрены.

    Вот теперь у нас поле работает нормально.
    Атрибут required нужен для того, чтобы нельзя было отправить пустое выражение (required — обязателен к заполнению).

    Также появился атрибут type со значением tel , который позволяет ввести телефон:
    Здесь же опять необходимо указывать pattern , чтобы данное поле работало нормально, ведь формат телефонов у всех же разный. К примеру вот такой формат:

    Телефон: Пример корректного номера 937-12-12

    Пока телефон не будет введен правильным способом, форма никуда не отправится. Также отмечу, что pattern можно использовать и в простых текстовых полях (type="text" ).

    Ещё один новый атрибут type со значением url , который позволяет проверить действительно ли введен url. Пример:

    Url:

    . В яндекс-браузере работает корректно.

    Ещё один новый элемент — это ползунок, который задаётся атрибутом type со значением range .

    У данного элемента есть минимальное и максимальное значение, которые затем можно куда-то передавать. Сразу домашнее задание:

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

    Если возникнут трудности, то код можно посмотреть ниже:

    Работа с ползунком в HTML5

    |

    var range = document.getElementById("myrange"); var text = document.getElementById("mytext"); range.addEventListener("change", function(){ //подписываем на событие change text.value = range.value; });

    Следующий новый элемент — это number . Сразу приведу пример и всё станет понятно:

    В данном случае мы можем выбрать элементы от 5 до 100 с шагом 5. Данный элемент далек от совершенства. Мало того, что он в разных браузерах выглядит по-разному, так в него можно вручную внести значение (некоторые браузеры это обрабатывают). Хотя мой браузер вполне нормально обработал данное поле (пользуюсь яндекс-браузером). Использовать его пока не рекомендую, если только не делать проверки на Javascript. Ещё одно домашнее задание (на этот раз кода не будет):

    Сделайте проверку на Javascript, что введенное значение в данное поле должно было кратно 5 (использовать событие change ).

    Пока мы разобрали только один атрибут required . Но есть ещё и другие:

    Атрибут autofocus служит для того, чтобы при переходе на данную страницу, фокус попал именно в данное поле.

    Атрибут placeholder служит для подсказки. Как только вы что-то начнете вводить, подсказка исчезнет. Для примера:

    Электронная почта:

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

    На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.

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

    Чтобы определить к какому элементу формы относится текущая метка, необходимо использовать атрибут for тега . Значение атрибута for должно соответствовать значению глобального атрибута того элемента формы, к которому будет относится метка. Атрибут for можно не использовать, если элемент будет находиться внутри элемента .

    Рассмотрим пример использования:

    Пример использования тега Да Нет
    Да Нет

    В этом примере мы:

    • Внутри первой формы:
      • Разместили две радиокнопки ( ) для выбора одного из ограниченного числа вариантов. Еще раз обратите внимание, что для радиокнопок внутри одной формы необходимо указывать одинаковое имя , значения мы указали разные. Для первой checked , который указывает, что элемент должен быть предварительно выбран при загрузке страницы (в данном случае радиокнопка со значением yes ). Кроме того, мы указали для радиокнопок глобальные атрибуты , которые определяют уникальный идентификатор для элемента.
      • Разместили два элемента , которые определяют текстовые метки для наших текстовых полей. Обратите внимание, что мы использовали атрибут for , чтобы определить к какому элементу формы относится текущая метка. Значение атрибута for соответствует значению глобального атрибута необходимой нам радиокнопки.
    • Внутри второй формы:
      • Разместили две радиокнопки ( ) для выбора одного из ограниченного числа вариантов. Для второй радиокнопки мы указали атрибут checked , который указывает, что элемент должен быть предварительно выбран при загрузке страницы (в данном случае радиокнопка со значением no ). Кроме того, мы указали для радиокнопок уникальные значения в рамках формы и одинаковые имена.
      • Разместили два элемента , внутри них мы разместили наши радиокнопки. В отличии от предыдущего метода отсутствует необходимость указывать для радиокнопок глобальные атрибуты (идентификатор для элемента), а для текстовых меток использовать атрибут for , чтобы на них сослаться (сделать привязку).

    В браузере оба варианта (метода) использования текстовых меток выглядят идентично:

    Подсказка для полей ввода

    Давайте рассмотри пример использования:

    Пример использования атрибута placeholder Login:

    Password:
    Далее

    В данном примере мы указали для элемента с типом text (однострочное текстовое поле) и типом password (поле с паролем) текстовую подсказку для пользователя (атрибут placeholder), которая описывает ожидаемое значение для ввода.

    Результат нашего примера:

    Вопросы и задачи по теме

    Перед тем как перейти к изучению следующей темы пройдите практическое задание:

    • Используя полученные знания составьте следующую форму оформления заказа:

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

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

    Это первая из трех статей о веб-формах HTML5. Перед тем, как перейти к стилизации и JavaScript-валидации на стороне клиента, мы рассмотрим основную разметку. Я рекомендую вам прочесть эту статью, даже если вы уже знакомы с формами - здесь описано множество новых атрибутов и плюшек!

    HTML формы могут казаться простыми, но они необходимы для большинства веб-сайтов и приложений. В HTML4 типы полей ввода были ограничены следующим списком:

    • input type="text"
    • input type="checkbox"
    • input type="radio"
    • input type="password"
    • input type="hidden" - для данных, невидимых пользователю
    • input type="file" - для загрузки файлов
    • textarea - для ввода больших объемов текста
    • select - для выпадающих списков
    • button — обычно используется для отправки данных формы, но также можно использовать input type="submit" и input type="image"

    К тому же:

    • возможности стилизации с помощью CSS ограничены
    • расширенные элементы, вроде элементов для выбора даты и цвета нужно реализовывать самостоятельно, с помощью кода
    • валидация на стороне клиента требует JavaScript
    Дополнительные типы полей

    В HTML5 было введено огромное количество новых типов полей. Они предоставляют нативные помощники ввода и валидации без JavaScript-кода

    Тип Описание
    email ввод email-адреса
    tel ввод телефонного номера - нет строгого синтаксиса, но разрывы строк будут удалены
    url ввод URL
    search поле поиска с разрывами строк автоматически удаляется
    number число с плавающей точкой
    range элемент управления для ввода примерного значения, обычно представляемого с помощью слайдеров
    date ввод дня, месяца и года
    datetime ввод дня, месяца, года, часа, минуты, секунды и микросекунды относительно текущей временной зоны
    datetime-local ввод даты и времени без временной зоны
    month ввод месяца и года без временной зоны
    week ввод номера недели без временной зоны
    time ввод времени без временной зоны
    color выбор цвета
    Атрибуты полей ввода

    Кроме перечисленных выше, поля ввода могут иметь любой из специфичных для формы атрибутов. Некоторые из них булевого типа, что означает, что они не требуют значений, например:

    конечно, можно и добавить таковые, если вам нравится синтаксис в стиле XHTML, например

    Атрибут Описание
    name имя поля ввода
    value изначальное значение
    checked делает флажок или переключатель выбранным
    maxlength Максимальная длина вводимой текстовой строки. В HTML5 также может быть применена и для полей textarea
    minlength Минимальная длина строки. Данная возможность документирована, но на момент написания поддержка браузерами слабая, и HTML валидаторы ругаются. Альтернативный вариант использования - pattern=".{3,}", что проверит на наличие минимум трех символов во вводимой строке
    placeholder ненавязчивая подсказка внутри поля
    autofocus устанавливает фокус на указанный элемент (видимый) при загрузке страницы
    required указывает, что в поле должно быть введено значение (не пустое поле)
    pattern проверяет значение на соответствие регулярному выражению
    min минимальное разрешенное значение (числовое и дата)
    max максимальное разрешенное значение (числовое и дата)
    step шаг изменения значения. Например, input type="number" min="10" max="19" step="2" разрешит только значения 10, 12, 14, 16 или 18
    autocomplete указывает браузеру подсказку к автодополнению, например “расчетный счет”, или может быть выставлен в значение “on” или “off”, для включения/отключения овтозаполнения
    inputmode

    указывает способ ввода. Наиболее полезные возможности:

    • verbatim - содержимое с дословной передачей смысла, например имена пользователей
    • latin - латиница, например, поля поиска
    • latin-name - имена, то есть с заглавной первой буквой
    • latin-prose - содержимое с не дословной передачей смысла, например сообщения, твиты, прочее.
    • numeric - числовые значения, где не подходят типы number и range , например, номера кредитных карт
    size размер в количестве символов для полей типа text или password, или количество пикселей для полей типа email, tel, url или search. Наверное, стоит избегать, и использовать стилизацию посредством CSS
    rows Количество текстовых строк (только для textarea)
    cols количество рядов символов (только для textarea)
    list ссылается на список опций
    spellcheck установить в true или false, чтобы включить/отключить проверку привописания для поля
    form идентификатор форму, которой принадлежит данное поле. Вообще-то поля должны размещаться внутри формы, но этот атрибут позволяет разместить поле за пределами формы, в любом месте страницы
    formaction указывает URI, переопределяющее действие формы при отправке данных (только для кнопок отправки/изображений)
    formmethod задает GET или POST, переопределяет атрибут формы method (только для кнопок отправки/изображений)
    formenctype указывает тип содержимого при отправке (text/plain, multipart/form-data или application/x-www-form-urlencoded, толкьо для кнопок отправки и изображений)
    formtarget указывает целевое окно/фрейм для переопределения атрибута формы target при отправке (только для кнопок отправки / изображений)
    readonly значение поля не может быть изменено, хотя оно будет отвалидировано и отправлено
    disabled отключает поле ввода - нет валидации, и данные не будут отправлены

    Заметьте, что поля date должны использовать формат YYYY-MM-DD для атрибутов value, min и max.

    Следующий пример показывает поле, требующее обязательного ввода email, заканчивающегося на @mysite.com, на которое смещается фокус при загрузке страницы.

    Списки данных

    Список данных содержит набор подходящих значений для любого типа поля, например:

    Если поддерживается datalist, браузер предоставляет список значений для автозаполнения, как только вы начинаете вводить данные в поле. Полный список обычно отображается при клике на стрелку, указывающую вниз (если таковая имеется). В отличие от стандартного выпадающего списка, пользователь может вводить произвольные значения в поле.

    Возможно указывать значения и текстовые пояснения к значениям, например:

    Internet Explorer

    но стоить помнить, что реализация отличается в различных браузерах. Например, Firefox производит автодополнение по тексту (Internet Explorer), тогда как Chrome - по значениям (IE), а текст указывает уменьшенным серым шрифтом:

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

    Отключение валидации

    Отключит валидацию всей формы можно выставив атрибут novalidate элементу form. В дополнение, можно выставить атрибут formnovalidate кнопке/изображению отправки формы.

    Запомните, что выставление полю атрибута disabled отключит валидацию этого поля.

    Поля вывода

    Ранее мы обсуждали поля ввода, но HTML5 также предоставляет поля для вывода информации

    • output - результат вычисления пользовательских действий
    • progress - полоса прогресса (атрибуты value и max задают состояние)
    • meter - шкала, которая может менять свой цвет между зеленым, желтым и красным в зависимости от установленных значений атрибутов value, min, max, low, high и optimum
    Разделение и подпись полей

    Согласно спецификации , каждый элемент формы считается параграфом, и отделяется от остальных частей элементом

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

    Что более важно - метки нужно использовать, либо окружая элемент формы, либо размещая их рядом, и связывая их атрибутом for с соответствующими полями, например:

    Имя

    Фамилия

    Email адрес

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

    Элементы управления не стандартизированы

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

    Поддержка браузерами

    Не все типы полей и атрибуты поддерживаются во всех браузерах. Говоря в общем, все современные браузеры, начиная с IE10+, включают в себя поддержку основных типов полей, вроде email или числовых полей. Но на момент написания статьи поля типа дата/время поддерживаются только в браузерах на движках Webkit и Blink.

    Для не поддерживаемых типов полей браузер откатится до стандартного поля ввода типа text, а не поддерживаемые атрибуты и их значения проигнорирует.

    Всегда используйте правильный тип!

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

    Рассмотрим даты. Поддержка в браузерах неоднородна, и это приводит к проблемам при внедрении.

  • Стандартное поле date всегда возвращает дату в формате YYYY-MM-DD, независимо от того, какой формат даты используется в вашем регионе.
  • IE и Firefox откатятся до стандартного поля text, а вашим пользователям нужно вводить даты в английском формате MM-DD-YYYY, или в европейском DD-MM-YYYY
  • JavaScript плагин, как в jQuery UI позволяет определять собственный формат - да хоть YYYY-MM-DD - но вы не можете гарантировать, что JavaScript будет включен на машине пользователя.
  • Простым решением будет отказ от использования HTML5 поля date, вернутья к полю text, и реализовать свой элемент управления датами. Не делайте этого. Вы никогда не создадите нормальный элемент для выбора даты, который работает на всех устройствах, на всех разрешениях экрана, поддерживает клавиатуру, мышь и сенсорный ввод, и продолжает работать при отключенном JavaScript. К тому же, в мобильных браузерах есть свои инструменты обработки элементов управления с заточкой под сенсорное управление.

    За типами полей ввода HTML5 будущее. Используйте их, и, если необходимо, пользуйтесь JavaScript заменой в ситуациях, требующих хорошей кроссбраузерности. Но помните о том, что требуется...

    Валидация на серверной стороне

    Валидация на стороне браузера не гарантируется. Даже если вы заставили всех перейти на последнюю версию Chrome, то и тогда вы не сможете избежать:

    • багов браузера или ошибок в JavaScript, пропускающих неверные данные
    • пользователей, изменяющих DOM или скрипты с помощью инструментов браузера
    • отправка данных с систем, которые вы не контролируете
    • перехват данных на пути от браузера к серверу (обычно по HTTP)

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

    И, наконец, помните, что даты могут быть получены в различных форматах, будь то YYYY-MM-DD, MM-DD-YYYY, DD-MM-YYYY и прочие. Проверяйте наличие цифр в первых четырех символах, или используйте встроенные средства разбора и проверки используемого языка/фреймворка в случае необходимости.

    В этой статье я рассказал о многих аспектах разметки HTML5 форм. В следующей статье мы рассмотрим CSS-свойства, относящиеся к формам.

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

    Обзор нововведений Новые элементы

    В языке HTML5 представлено пять новых элементов, связанных с вводом данных и формами.

    Элемент Назначение Примечания
    progress Представляет ход выполнения задачи. Элемент progress может представлять состояние загрузки файла.
    meter Представляет значение по шкале в известном диапазоне. Элемент meter можно использовать, например, для измерения температуры или веса.
    datalist Представляет набор элементов option , которые могут использоваться в сочетании с новым атрибутом list для создания раскрывающихся меню. Когда пользователь переходит к вводу данных в области, связанной со списком данных, появляется раскрывающееся меню со значениями из перечня datalist .
    keygen Элемент управления для создания пар ключей. При отправке формы в локальное хранилище заносится закрытый ключ, а на сервер отправляется открытый ключ.
    output Отображает результаты расчета. Примером использования элемента output может служить вывод суммы значений двух введенных элементов.
    Новые типы элементов ввода

    В HTML5 представлено 13 новых элементов ввода. В браузерах, которые их не поддерживают, они превращаются в обычные элементы для ввода текста.

    Тип элемента ввода Назначение Примечания
    tel Ввод номера телефона. Элемент tel не принуждает к вводу текста в определенном формате: для этого можно использовать элемент pattern или метод setCustomValidity() , осуществляющий дополнительную проверку.
    search Предлагает пользователю ввести текст, который необходимо найти. Разница между search и text заключается в основном в оформлении. Для типа search поле ввода можно оформить в соответствии с полями поиска данной платформы.
    url Ввод одного URL. Элемент url используется для ввода отдельного абсолютного URL , который представляет довольно широкий диапазон значений.
    email Ввод одного адреса электронной почты или списка адресов. Если указан атрибут multiple , можно ввести несколько адресов электронной почты через запятую.
    datetime Ввод даты и времени в часовом поясе UTC.
    date Ввод даты без часового пояса.
    month Ввод даты с указанием года и месяца, но без часового пояса.
    week Ввод даты, состоящей из номера недели и года, но без часового пояса. Пример этого формата – 2011-W05 для пятой недели 2011 года.
    time Ввод времени с указанием часов, минут, секунд и долей секунды, но без часового пояса.
    datetime-local Ввод даты и времени без часового пояса.
    number Ввод числовых данных. Допустимые значения – числа с плавающей запятой .
    range Ввод числовых данных (в отличие от типа number само число не играет роли). Реализация этого элемента управления диапазона в большинстве поддерживающих его браузеров – ползунок.
    color Выбор цвета с помощью цветового круга. Значение должно быть действительным простым цветом в нижнем регистре , например #ffffff.
    Новые атрибуты ввода

    В HTML5 также представлено несколько новых атрибутов для элементов ввода и формы.

    Атрибут Назначение Примечания
    autofocus Фокусирование ввода на элементе, когда страница загружена. Атрибут autofocus может применяться к элементам input, select, textarea и button.
    placeholder Подсказка для пользователя о типе данных, которые необходимо ввести. Значение заполнителя отображается светлым текстом, пока элемент не будет выделен и пользователь не введет данные. Этот атрибут можно указывать в элементах input и textarea.
    form Указание одной или нескольких форм, которым принадлежит элемент ввода. С помощью атрибута form элементы ввода можно размещать в любой части страницы, а не только в объекте формы. Кроме того, отдельный элемент можно связать с несколькими формами.
    required Логический атрибут, который означает, что элемент обязателен. Атрибут required полезен при выполнении проверки на основе браузера без использования специального кода JavaScript.
    autocomplete Позволяет указать, что в поле не должно использоваться автозаполнение и в него не следует подставлять значения, ранее введенные пользователем. Атрибут autocomplete полезен для таких полей, как номер кредитной карты или одноразовый пароль, которые не следует заполнять автоматически. По умолчанию атрибут autocomplete имеет состояние on ("вкл."). Чтобы отключить его, установите значение off ("выкл.").
    pattern Проверка значения элемента на основе регулярного выражения. Если используется атрибут pattern , следует также указать значение title , описывающее для пользователя предполагаемый шаблон ввода.
    dirname Предназначен для отправки сведений о направлении элемента управления вместе с формой. Например, если пользователь ввел текст справа налево, а элемент ввода содержит атрибут dirname , то вместе с введенным значением будет отправлен параметр направления.
    novalidate Если в элементе формы указан этот атрибут, проверка ее отправки отключается.
    formaction Переопределение атрибута action в элементе формы.
    formenctype Переопределение атрибута enctype в элементе формы. Этот атрибут поддерживается в элементах input и button .
    formmethod Переопределение атрибута method в элементе формы. Этот атрибут поддерживается в элементах input и button .
    formnovalidate Переопределение атрибута novalidate в элементе формы. Этот атрибут поддерживается в элементах input и button .
    formtarget Переопределение атрибута target в элементе формы. Этот атрибут поддерживается в элементах input и button .
    Объект FormData

    Одно из усовершенствований технологии XMLHttpRequest – появление объекта FormData . С помощью FormData можно создавать и отправлять наборы из пар "ключ/значение" и файлы с применением XMLHttpRequest . При использовании этого метода данные отправляются в том же формате, что и с помощью метода формы submit() с типом кодировки multipart/form-data .

    Объект FormData позволяет оперативно создавать формы HTML на языке JavaScript и отправлять их с помощью метода XMLHttpRequest.send() . Ниже приведен простой пример.

    Var formData = new FormData(); formData.append("part_num", "123ABC"); formData.append("part_price", 7.95); formData.append("part_image", somefile) var xhr = new XMLHttpRequest(); xhr.open("POST", "http://some.url/"); xhr.send(formData);

    С помощью объекта FormData также можно вводить дополнительные данные в существующую форму перед их отправкой.

    Var formElement = document.getElementById("someFormElement"); var formData = new FormData(formElement); formData.append("part_description", "The best part ever!"); var xhr = new XMLHttpRequest(); xhr.open("POST", "http://some.url/"); xhr.send(formData);

    Проверка на основе браузера

    Следует признать, что проверка данных формы – довольно скучное занятие, однако избежать его нельзя. Сегодня для проверки допустимости введенных данных и их наличия в обязательных полях формы перед ее отправкой на стороне клиента обычно используется код JavaScript или специальная библиотека.

    Новые атрибуты ввода, такие как required и pattern , в сочетании с селекторами псевдоклассов CSS, облегчают написание проверок и обратную связь с пользователями. Есть и другие усовершенствованные методы проверки, которые позволяют с помощью кода JavaScript задавать специальные правила и сообщения, а также определять недопустимость элемента и ее причины.

    Атрибут required

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

    Атрибут pattern

    Атрибут pattern задает регулярное выражение, используемое для проверки поля ввода. В этом примере показано обязательное поле ввода текста для номера детали. Предполагается, что такой номер состоит из трех букв верхнего регистра и четырех цифр. Использование атрибутов required и pattern позволяет убедиться, что в поле введено значение, которое соответствует этому формату. Если пользователь наводит указатель на поле, отображается сообщение в атрибуте заголовка.

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

    :invalid { border: 2px solid #ff0000; }

    Атрибут formnovalidate

    Атрибут formnovalidate можно применять к элементам input и button . Он включает проверку отправки формы. Ниже приведен пример, в котором для отправки формы с помощью кнопки "Отправить" требуется действительное значение, однако для ее отправки с помощью кнопки "Сохранить" оно не требуется.

    API проверки ограничений

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

    Email: Repeat Email Address: function check(input) { if (input.value != document.getElementById("email_addr").value) { input.setCustomValidity("The two email addresses must match."); } else { // input is valid -- reset the error message input.setCustomValidity(""); } }

    Сборка

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

    Лучшие статьи по теме