ÐалидаÑÐ¸Ñ Ð¾Ð³ÑаниÑений
Создание веб-ÑоÑм вÑегда бÑло Ñложной задаÑей. ХоÑÑ ÑвеÑÑÑаÑÑ ÑÐ°Ð¼Ñ ÑоÑÐ¼Ñ Ð´Ð¾ÑÑаÑоÑно пÑоÑÑо, пÑовеÑиÑÑ, Ð¸Ð¼ÐµÐµÑ Ð»Ð¸ каждое поле валидное знаÑение â Ñложнее, а инÑоÑмиÑование полÑзоваÑÐµÐ»Ñ Ð¾ пÑоблеме Ð¼Ð¾Ð¶ÐµÑ ÑÑаÑÑ Ð½Ð°ÑÑоÑÑей головной болÑÑ. HTML5 пÑедÑÑавил Ð´Ð»Ñ ÑоÑм новÑй меÑ
анизм: он добавлÑÐµÑ ÑлеменÑÑ <input> новÑе ÑеманÑиÑеÑкие ÑÐ¸Ð¿Ñ Ð¸ constraint validation, ÑÑÐ¾Ð±Ñ Ð¾Ð±Ð»ÐµÐ³ÑиÑÑ Ð¿ÑовеÑÐºÑ ÑодеÑжимого на ÑÑоÑоне клиенÑа. С помоÑÑÑ Ð½Ð¾Ð²ÑÑ
аÑÑибÑÑов оÑновнÑе огÑаниÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¿ÑовеÑÐµÐ½Ñ Ð±ÐµÐ· иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ JavaScript; более ÑложнÑе огÑаниÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¿ÑовеÑÐµÐ½Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Constraint validation API.
Ðазовое введение в ÑÑи конÑепÑии Ñ Ð¿ÑимеÑами можно найÑи в Ñазделе ÐалидаÑÐ¸Ñ ÑоÑм на ÑÑоÑоне клиенÑа.
ÐÑимеÑание: HTML5-валидаÑÐ¸Ñ Ð¾Ð³ÑаниÑений не оÑменÑÐµÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи дополниÑелÑной валидаÑии на ÑÑоÑоне ÑеÑвеÑа. ÐеÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо ожидаеÑÑÑ Ð³Ð¾Ñаздо менÑÑее не валиднÑÑ Ð·Ð°Ð¿ÑоÑов ÑоÑмÑ, они вÑÑ Ð¶Ðµ могÑÑ Ð±ÑÑÑ Ð¾ÑпÑÐ°Ð²Ð»ÐµÐ½Ñ Ð½ÐµÑовмеÑÑимÑми бÑаÑзеÑами (напÑимеÑ, не поддеÑживаÑÑими HTML5 или JavaScript) или злоÑмÑÑленниками, коÑоÑÑе пÑÑаÑÑÑÑ Ð²Ð·Ð»Ð¾Ð¼Ð°ÑÑ Ð²Ð°Ñе веб-пÑиложение. СледоваÑелÑно, как и в ÑлÑÑае Ñ HTML4, вам по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð½Ñжно пÑоизводиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð¾Ð³ÑаниÑений ввода и на ÑÑоÑоне ÑеÑвеÑа.
ÐнÑÑÑенние и базовÑе огÑаниÑениÑ
Ð HTML5 базовÑе огÑаниÑÐµÐ½Ð¸Ñ Ð¾Ð±ÑÑвлÑÑÑÑÑ Ð´Ð²ÑÐ¼Ñ ÑпоÑобами:
- ÐадаваÑÑ ÑеманÑиÑеÑки наиболее подÑ
одÑÑие знаÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð°ÑÑибÑÑа
typeÑлеменÑа<input>. ÐапÑимеÑ, ÑипаemailавÑомаÑиÑеÑки ÑоздаÑÑ Ð¾Ð³ÑаниÑение, коÑоÑое пÑовеÑÑеÑ, ÑвлÑеÑÑÑ Ð»Ð¸ знаÑение валиднÑм email-адÑеÑом. - ÐÑполÑзоваÑÑ Ð°ÑÑибÑÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии, позволÑÑÑие доÑÑаÑоÑно пÑоÑÑо задаÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð±ÐµÐ· помоÑи JavaScript.
СеманÑиÑеÑкие ÑÐ¸Ð¿Ñ input
ÐнÑÑÑенние огÑаниÑÐµÐ½Ð¸Ñ Ð°ÑÑибÑÑа type:
| Тип input | ÐпиÑание огÑаниÑÐµÐ½Ð¸Ñ | СвÑзанное наÑÑÑение |
|---|---|---|
<input type="URL"> |
ÐнаÑение должно бÑÑÑ URL-адÑеÑом, как Ñказано в URL Living Standard. | ÐаÑÑÑение огÑаниÑÐµÐ½Ð¸Ñ TypeMismatch |
<input type="email"> |
ÐнаÑение должно бÑÑÑ ÑинÑакÑиÑеÑки пÑавилÑнÑм email-адÑеÑом, коÑоÑÑй обÑÑно Ð¸Ð¼ÐµÐµÑ ÑоÑÐ¼Ð°Ñ username@hostname.tld. |
ÐаÑÑÑение огÑаниÑÐµÐ½Ð¸Ñ TypeMismatch |
ÐÐ»Ñ Ð¾Ð±Ð¾Ð¸Ñ
ÑÑиÑ
Ñипов input, еÑли ÑÑÑановлен аÑÑибÑÑ multiple допÑÑкаеÑÑÑ Ð²Ð²Ð¾Ð´ неÑколÑкиÑ
ÑазделÑннÑÑ
запÑÑÑми знаÑений. ÐÑли какое-Ñо из знаÑений не ÑдовлеÑвоÑÑÐµÑ ÑÑловиÑ, опиÑÐ°Ð½Ð½Ð¾Ð¼Ñ Ð²ÑÑе, ÑÑабаÑÑÐ²Ð°ÐµÑ Ð½Ð°ÑÑÑение огÑаниÑÐµÐ½Ð¸Ñ Type mismatch.
ÐбÑаÑиÑе внимание, ÑÑо болÑÑинÑÑво Ñипов input не имеÑÑ Ð²Ð½ÑÑÑÐµÐ½Ð½Ð¸Ñ Ð¾Ð³ÑаниÑений, Ñак как некоÑоÑÑе из Ð½Ð¸Ñ Ð½ÐµÐ´Ð¾ÑÑÑÐ¿Ð½Ñ Ð´Ð»Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии огÑаниÑений или имеÑÑ Ð°Ð»Ð³Ð¾ÑиÑм, по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿ÑеобÑазÑÑÑий непÑавилÑнÑе знаÑÐµÐ½Ð¸Ñ Ð² пÑавилÑнÑе.
ÐÑÑибÑÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии
Рдополнение к аÑÑибÑÑÑ type, опиÑÐ°Ð½Ð½Ð¾Ð¼Ñ Ð²ÑÑе, Ð´Ð»Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ð¾ÑновнÑÑ
огÑаниÑений иÑполÑзÑÑÑÑÑ ÑледÑÑÑие аÑÑибÑÑÑ:
| ÐÑÑибÑÑ | Ð¢Ð¸Ð¿Ñ input, поддеÑживаÑÑие аÑÑибÑÑ | ÐозможнÑе знаÑÐµÐ½Ð¸Ñ | ÐпиÑание огÑаниÑÐµÐ½Ð¸Ñ | СвÑзанное наÑÑÑение |
|---|---|---|---|---|
pattern
|
text, search, url,
tel, email, password
|
РегÑлÑÑное вÑÑажение JavaScript
(без
ECMAScript 5
Ñлагов global, ignoreCase, and
multiline
|
ÐнаÑение должно ÑооÑвеÑÑÑвоваÑÑ ÑаблонÑ. |
ÐаÑÑÑение огÑаниÑениÑ
patternMismatch
|
min
|
range, number |
Ðалидное ÑиÑло | ÐнаÑение в поле должно бÑÑÑ Ð±Ð¾Ð»ÑÑе или Ñавно знаÑÐµÐ½Ð¸Ñ Ð°ÑÑибÑÑа |
ÐаÑÑÑение огÑаниÑениÑ
rangeUnderflow
|
date, month, week |
ÐÐ°Ð»Ð¸Ð´Ð½Ð°Ñ Ð´Ð°Ñа | |||
datetime, datetime-local, time
|
ÐÐ°Ð»Ð¸Ð´Ð½Ð°Ñ Ð´Ð°Ñа и вÑÐµÐ¼Ñ | |||
max
|
range, number |
Ðалидное ÑиÑло | ÐнаÑение в поле должно бÑÑÑ Ð¼ÐµÐ½ÑÑе или Ñавно знаÑÐµÐ½Ð¸Ñ Ð°ÑÑибÑÑа |
ÐаÑÑÑение огÑаниÑениÑ
rangeOverflow
|
date, month, week |
ÐÐ°Ð»Ð¸Ð´Ð½Ð°Ñ Ð´Ð°Ñа | |||
datetime, datetime-local, time
|
ÐÐ°Ð»Ð¸Ð´Ð½Ð°Ñ Ð´Ð°Ñа и вÑÐµÐ¼Ñ | |||
required
|
text, search, url,
tel, email, password,
date, datetime, datetime-local,
month, week, time,
number, checkbox, radio,
file; а Ñакже ÑлеменÑÑ <select>
и <textarea>
|
ÐеÑ, Ñак как ÑÑо бÑлев аÑÑибÑÑ: его налиÑие ознаÑÐ°ÐµÑ true, а оÑÑÑÑÑÑвие â false | Рполе обÑзаÑелÑно должно бÑÑÑ Ð·Ð½Ð°Ñение (еÑли ÑÑÑановлен аÑÑибÑÑ) |
valueMissing
constraint violation
|
step
|
date |
Целое ÑиÑло дней |
ÐÑли Ð´Ð»Ñ Ñага не задан лиÑеÑал any, знаÑением должно бÑÑÑ
min + Ñелое ÑиÑло, кÑаÑное ÑагÑ
|
ÐаÑÑÑение огÑаниÑениÑ
stepMismatch
|
month |
Целое ÑиÑло меÑÑÑев | |||
week |
Целое ÑиÑло Ð½ÐµÐ´ÐµÐ»Ñ | |||
datetime, datetime-local, time
|
Целое ÑиÑло ÑекÑнд | |||
range, number |
Целое ÑиÑло | |||
minlength
|
text, search, url,
tel, email, password; а Ñакже
ÑÐ»ÐµÐ¼ÐµÐ½Ñ <textarea>/td>
|
Целое ÑиÑло |
ÐÑли аÑÑибÑÑ Ð½Ðµ пÑÑÑой, колиÑеÑÑво Ñимволов (ÑоÑек кода) ÑодеÑжимого
Ð¿Ð¾Ð»Ñ Ð½Ðµ должно бÑÑÑ Ð¼ÐµÐ½ÑÑе знаÑениÑ, Ñказанного в аÑÑибÑÑе. ÐÑе ÑимволÑ
новой ÑÑÑоки ноÑÐ¼Ð°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ñ Ð´Ð¾ одного Ñимвола (в оÑлиÑие Ð¾Ñ CRLF-паÑ) длÑ
<textarea>.
|
ÐаÑÑÑение огÑаниÑениÑ
tooShort
|
maxlength
|
text, search, url,
tel, email, password; а Ñакже
ÑÐ»ÐµÐ¼ÐµÐ½Ñ <textarea>
|
Целое ÑиÑло | ÐолиÑеÑÑво Ñимволов (ÑоÑек кода) ÑодеÑжимого Ð¿Ð¾Ð»Ñ Ð½Ðµ должно пÑевÑÑаÑÑ Ð·Ð½Ð°Ñение, Ñказанное в аÑÑибÑÑе |
ÐаÑÑÑение огÑаниÑениÑ
tooLong
|
ÐÑоÑеÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии огÑаниÑений
ÐалидаÑÐ¸Ñ Ð¾Ð³ÑаниÑений вÑполнÑеÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Constraint Validation API либо на оÑделÑном ÑлеменÑе ÑоÑмÑ, либо на ÑÑовне ÑоÑмÑ, на Ñамом ÑлеменÑе <form>. СпоÑÐ¾Ð±Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии:
- ÐÑзов меÑода
checkValidity()илиreportValidity()ÑвÑзанного Ñ ÑоÑмой DOM-инÑеÑÑейÑа, (HTMLInputElement,HTMLSelectElement,HTMLButtonElement,HTMLOutputElementилиHTMLTextAreaElement), коÑоÑÑй оÑÐµÐ½Ð¸Ð²Ð°ÐµÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ ÑолÑко на данном ÑлеменÑе, позволÑÑ ÑкÑипÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ ÑÑÑ Ð¸Ð½ÑоÑмаÑиÑ. ÐеÑодcheckValidity()возвÑаÑÐ°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкое знаÑение, ÑказÑваÑÑее, ÑооÑвеÑÑвÑÐµÑ Ð»Ð¸ знаÑение ÑлеменÑа его огÑаниÑениÑм. (ÐбÑÑно ÑÑо Ð´ÐµÐ»Ð°ÐµÑ Ð±ÑаÑÐ·ÐµÑ Ð¿Ñи опÑеделении Ñого, какой CSS-пÑевдоклаÑÑов пÑименÑеÑÑÑ::validили:invalid.) ÐапÑоÑив, меÑодreportValidity()ÑообÑÐ°ÐµÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¾ лÑбÑÑ Ð½Ð°ÑÑÑениÑÑ Ð¾Ð³ÑаниÑений. - ÐÑзов меÑода
checkValidity()илиreportValidity()инÑеÑÑейÑаHTMLFormElement. - ÐÑпÑавка Ñамой ÑоÑмÑ.
ÐÑзов меÑода checkValidity() назÑваеÑÑÑ ÑÑаÑиÑеÑкой валидаÑией огÑаниÑений, а вÑзов меÑода reportValidity() или оÑпÑавка ÑоÑÐ¼Ñ Ð½Ð°Ð·ÑваеÑÑÑ Ð¸Ð½ÑеÑакÑивной валидаÑией огÑаниÑений.
ÐÑимеÑание:
- ÐÑли ÑлеменÑÑ
<form>задан аÑÑибÑÑnovalidate, инÑеÑакÑÐ¸Ð²Ð½Ð°Ñ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð¾Ð³ÑаниÑений не пÑоизойдÑÑ. - ÐÑзов меÑода
submit()инÑеÑÑейÑаHTMLFormElementне запÑÑÐºÐ°ÐµÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð¾Ð³ÑаниÑений. ÐÑÑгими Ñловами, ÑÑÐ¾Ñ Ð¼ÐµÑод оÑпÑавлÑÐµÑ Ð´Ð°Ð½Ð½Ñе ÑоÑÐ¼Ñ Ð½Ð° ÑеÑвеÑ, даже еÑли огÑаниÑÐµÐ½Ð¸Ñ Ð½Ð°ÑÑÑенÑ. ÐмеÑÑо него вÑзовиÑе меÑодclick()кнопки оÑпÑавки ÑоÑмÑ.
СложнÑе огÑаниÑÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Constraint Validation API
С помоÑÑÑ JavaScript и Constraint Validation API можно ÑеализоваÑÑ Ð±Ð¾Ð»ÐµÐµ ÑложнÑе огÑаниÑениÑ, напÑимеÑ, огÑаниÑениÑ, каÑаÑÑиеÑÑ ÑÑÐ°Ð·Ñ Ð½ÐµÑколÑÐºÐ¸Ñ Ð¿Ð¾Ð»ÐµÐ¹ или огÑаниÑениÑ, вклÑÑаÑÑие ÑложнÑе вÑÑиÑлениÑ.
Ðо ÑÑÑи, Ð¸Ð´ÐµÑ Ð·Ð°ÐºÐ»ÑÑаеÑÑÑ Ð² Ñом, ÑÑÐ¾Ð±Ñ Ð¿Ñи наÑÑÑплении опÑеделÑнного ÑобÑÑÐ¸Ñ Ð¿Ð¾Ð»Ñ ÑоÑÐ¼Ñ (напÑимеÑ, onchange) запÑÑкаÑÑ JavaScript, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ, наÑÑÑено огÑаниÑение, и заÑем Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¼ÐµÑода field.setCustomValidity(), задаÑÑ ÑезÑлÑÑÐ°Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии: пÑÑÑÐ°Ñ ÑÑÑока ознаÑаеÑ, ÑÑо огÑаниÑение ÑоблÑдаеÑÑÑ, а лÑÐ±Ð°Ñ Ð´ÑÑÐ³Ð°Ñ ÑÑÑока ознаÑаеÑ, ÑÑо еÑÑÑ Ð¾Ñибка и ÑÑа ÑÑÑока ÑвлÑеÑÑÑ ÑообÑением об оÑибке, коÑоÑое нÑжно показаÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ.
ÐгÑаниÑение, обÑединÑÑÑее неÑколÑко полей: ÐалидаÑÐ¸Ñ Ð¿Ð¾ÑÑового индекÑа
ФоÑÐ¼Ð°Ñ Ð¿Ð¾ÑÑового индекÑа в ÑазнÑÑ
ÑÑÑанаÑ
оÑлиÑаеÑÑÑ. Ðало Ñого, ÑÑо в болÑÑинÑÑве ÑÑÑан Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑй пÑеÑÐ¸ÐºÑ Ñ ÐºÐ¾Ð´Ð¾Ð¼ ÑÑÑÐ°Ð½Ñ (напÑимеÑ, D â в ÐеÑмании, F â во ФÑанÑии или ШвейÑаÑии), в некоÑоÑÑÑ
ÑÑÑанаÑ
, поÑÑовÑе индекÑÑ ÑодеÑÐ¶Ð°Ñ ÑикÑиÑованное колиÑеÑÑвом ÑиÑÑ; дÑÑгие, напÑимеÑ, ÐеликобÑиÑаниÑ, имеÑÑ ÐµÑÑ Ð±Ð¾Ð»ÐµÐµ ÑложнÑÑ ÑÑÑÑкÑÑÑÑ, допÑÑкаÑÑÑÑ Ð² опÑеделÑннÑÑ
меÑÑаÑ
еÑÑ Ð¸ налиÑие бÑкв.
ÐÑимеÑание: Ðалее пÑедÑÑавлена не Ð¿Ð¾Ð»Ð½Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñека валидаÑии поÑÑового индекÑа, а ÑкоÑее демонÑÑÑаÑÐ¸Ñ ÐºÐ»ÑÑевÑÑ ÐºÐ¾Ð½ÑепÑий.
РкаÑеÑÑве пÑимеÑа Ð¼Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸Ð¼ ÑкÑипÑ, вÑполнÑÑÑий валидаÑÐ¸Ñ Ð¾ÑганиÑений пÑоÑÑой ÑоÑмÑ:
<form>
<label for="ZIP">ZIP : </label>
<input type="text" id="ZIP" />
<label for="Country">Country : </label>
<select id="Country">
<option value="ch">Switzerland</option>
<option value="fr">France</option>
<option value="de">Germany</option>
<option value="nl">The Netherlands</option>
</select>
<input type="submit" value="Validate" />
</form>
ÐолÑÑим ÑледÑÑÑÑÑ ÑоÑмÑ:
СнаÑала запиÑем ÑÑнкÑиÑ, пÑовеÑÑÑÑÑÑ Ñамо огÑаниÑение:
function checkZIP() {
// ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑÑÑÐ°Ð½Ñ Ð¾Ð¿ÑеделÑем Ñаблон, коÑоÑÐ¾Ð¼Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ ÑледоваÑÑ Ð¿Ð¾ÑÑовÑй индекÑ
var constraints = {
ch: [
"^(CH-)?\\d{4}$",
"Switzerland ZIPs must have exactly 4 digits: e.g. CH-1950 or 1950",
],
fr: [
"^(F-)?\\d{5}$",
"France ZIPs must have exactly 5 digits: e.g. F-75012 or 75012",
],
de: [
"^(D-)?\\d{5}$",
"Germany ZIPs must have exactly 5 digits: e.g. D-12345 or 12345",
],
nl: [
"^(NL-)?\\d{4}\\s*([A-RT-Z][A-Z]|S[BCE-RT-Z])$",
"Nederland ZIPs must have exactly 4 digits, followed by 2 letters except SA, SD and SS",
],
};
// ÐÑоÑиÑаÑÑ id ÑÑÑанÑ
var country = document.getElementById("Country").value;
// ÐолÑÑиÑÑ Ð¿Ð¾Ð»Ðµ NPA
var ZIPField = document.getElementById("ZIP");
// СоздаÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¾Ñ Ð¾Ð³ÑаниÑениÑ
var constraint = new RegExp(constraints[country][0], "");
console.log(constraint);
// ÐалидиÑоваÑÑ Ð¸Ð½Ð´ÐµÐºÑ
if (constraint.test(ZIPField.value)) {
// ÐÐ½Ð´ÐµÐºÑ ÑооÑвеÑÑÑвÑÐµÑ Ð¾Ð³ÑаниÑениÑ, Ð¼Ñ Ð¸ÑполÑзÑем ConstraintAPI, ÑÑÐ¾Ð±Ñ ÑообÑиÑÑ Ð¾Ð± ÑÑом
ZIPField.setCustomValidity("");
} else {
// ÐÐ½Ð´ÐµÐºÑ Ð½Ðµ ÑооÑвеÑÑÑвÑÐµÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ , Ð¼Ñ Ð¸ÑполÑзÑем ConstraintAPI, ÑÑобÑ
// показаÑÑ ÑообÑение, опиÑÑваÑÑее ÑоÑмаÑ, ÑÑебÑемÑй Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑÑÑанÑ
ZIPField.setCustomValidity(constraints[country][1]);
}
}
ÐаÑем Ð¼Ñ ÑвÑзÑваем его Ñ ÑобÑÑием onchange Ð´Ð»Ñ <select> и Ñ ÑобÑÑием oninput Ð´Ð»Ñ <input>:
window.onload = function () {
document.getElementById("Country").onchange = checkZIP;
document.getElementById("ZIP").oninput = checkZIP;
};
ÐгÑаниÑение ÑазмеÑа загÑÑжаемого Ñайла
ÐÑÑ Ð¾Ð´Ð½Ð¸Ð¼ ÑаÑпÑоÑÑÑанÑннÑм огÑаниÑением ÑвлÑеÑÑÑ Ð»Ð¸Ð¼Ð¸Ñ ÑазмеÑа загÑÑжаемÑÑ
Ñайлов. ÐÐ°Ð½Ð½Ð°Ñ Ð¿ÑовеÑка на ÑÑоÑоне клиенÑа пеÑед оÑпÑавкой на ÑеÑÐ²ÐµÑ ÑÑебÑÐµÑ ÑоÑеÑÐ°Ð½Ð¸Ñ Constraint Validation API и оÑобенно меÑода field.setCustomValidity() Ñ Ð´ÑÑгим JavaScript API, в данном ÑлÑÑае â File API.
ÐÐ¾Ñ ÑаÑÑÑ HTML:
<label for="FS">Select a file smaller than 75 kB : </label>
<input type="file" id="FS" />
Ðна оÑобÑажаеÑ:
JavaScript ÑÑиÑÑÐ²Ð°ÐµÑ Ð²ÑбÑаннÑй Ñайл, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¼ÐµÑода File.size() полÑÑÐ°ÐµÑ ÐµÐ³Ð¾ ÑазмеÑ, ÑÑÐ°Ð²Ð½Ð¸Ð²Ð°ÐµÑ ÐµÐ³Ð¾ Ñ Ð»Ð¸Ð¼Ð¸Ñом и вÑзÑÐ²Ð°ÐµÑ Constraint Validation API, ÑÑÐ¾Ð±Ñ ÑообÑиÑÑ Ð±ÑаÑзеÑÑ Ð¾ наÑÑÑении:
function checkFileSize() {
var FS = document.getElementById("FS");
var files = FS.files;
// ÐÑли вÑбÑан Ñ
оÑÑ Ð±Ñ Ð¾Ð´Ð¸Ð½ Ñайл
if (files.length > 0) {
if (files[0].size > 75 * 1024) {
// ÐÑовеÑиÑÑ Ð¾Ð³ÑаниÑение
FS.setCustomValidity("Ð Ð°Ð·Ð¼ÐµÑ Ñайла не должен пÑевÑÑаÑÑ 75 kB");
return;
}
}
// ÐÑли наÑÑÑÐµÐ½Ð¸Ñ Ð¾Ð³ÑаниÑений неÑ
FS.setCustomValidity("");
}
ÐÐ°ÐºÐ¾Ð½ÐµÑ Ð¼Ñ ÑвÑзÑваем меÑод Ñ Ð½ÑжнÑм ÑобÑÑием:
window.onload = function () {
document.getElementById("FS").onchange = checkFileSize;
};
ÐизÑалÑное оÑоÑмление наÑÑÑÐµÐ½Ð¸Ñ Ð¾Ð³ÑаниÑений
Ðомимо ÑÑÑановки огÑаниÑений, веб-ÑазÑабоÑÑики Ñ Ð¾ÑÑÑ ÑпÑавлÑÑÑ Ñем, какие ÑообÑÐµÐ½Ð¸Ñ Ð¿Ð¾ÐºÐ°Ð·ÑваÑÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑм и как они оÑоÑмленÑ.
УпÑавление внеÑним видом ÑлеменÑов
ÐзменÑÑÑ Ð²Ð½ÐµÑний вид ÑлеменÑов можно Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ CSS-пÑевдоклаÑÑов.
CSS-пÑевдоклаÑÑÑ :required и :optional
ÐÑевдоклаÑÑÑ :required и :optional позволÑÑÑ Ð¿Ð¸ÑаÑÑ ÑелекÑоÑÑ, ÑооÑвеÑÑÑвÑÑÑие ÑлеменÑам ÑоÑмÑ, коÑоÑÑе имеÑÑ Ð¸Ð»Ð¸ не имеÑÑ Ð°ÑÑибÑÑ required
CSS-пÑевдоклаÑÑ :placeholder-shown
СмоÑÑиÑе :placeholder-shown
CSS-пÑевдоклаÑÑÑ :valid и :invalid
ÐÑевдоклаÑÑÑ :valid и :invalid иÑполÑзÑÑÑÑÑ Ð´Ð»Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑлеменÑов <input>, ÑодеÑжимое коÑоÑÑÑ
ÑвлÑеÑÑÑ Ð²Ð°Ð»Ð¸Ð´Ð½Ñм или не валиднÑм ÑооÑвеÑÑÑвенно. ÐÑи клаÑÑÑ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¾ÑоÑмлÑÑÑ Ð²Ð°Ð»Ð¸Ð´Ð½Ñе или не валиднÑе ÑлеменÑÑ ÑоÑмÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð±Ð»ÐµÐ³ÑиÑÑ Ð¾Ð¿Ñеделение ÑлеменÑов, коÑоÑÑе имеÑÑ ÐºÐ¾ÑÑекÑнÑй или некоÑÑекÑнÑй ÑоÑмаÑ.
УпÑавление ÑекÑÑом наÑÑÑÐµÐ½Ð¸Ñ Ð¾Ð³ÑаниÑений
СледÑÑÑее Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð¼Ð¾ÑÑ Ñ ÑпÑавлением ÑекÑÑом наÑÑÑÐµÐ½Ð¸Ñ Ð¾Ð³ÑаниÑений:
-
ÐеÑод element.setCustomValidity(message) Ð´Ð»Ñ ÑлеменÑов:
<fieldset>. ÐÑимеÑание: Ðобавление каÑÑомного ÑообÑÐµÐ½Ð¸Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии на ÑÐ»ÐµÐ¼ÐµÐ½Ñ fieldset не пÑедоÑвÑаÑÐ°ÐµÑ Ð¾ÑпÑÐ°Ð²ÐºÑ ÑоÑÐ¼Ñ Ð² болÑÑинÑÑве бÑаÑзеÑов.<input><output><select>- Ðнопка оÑпÑавки ÑоÑÐ¼Ñ Ð² виде ÑлеменÑа
<button>илиinputsubmitÑ ÑказаннÑм Ñипом submit. ÐÑÑгие ÑÐ¸Ð¿Ñ ÐºÐ½Ð¾Ð¿Ð¾Ðº не ÑÑаÑÑвÑÑÑ Ð² валидаÑии огÑаниÑений. <textarea>
-
ÐнÑеÑÑейÑ
ValidityStateопиÑÑÐ²Ð°ÐµÑ Ð¾Ð±ÑекÑ, возвÑаÑаемÑй ÑвойÑÑвом validity пеÑеÑиÑленнÑÑ Ð²ÑÑе Ñипов ÑлеменÑов. Ðн пÑедÑÑавлÑÐµÑ ÑазнÑе ÑпоÑÐ¾Ð±Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ðµ валидноÑÑи знаÑениÑ. ÐмеÑÑе они помогаÑÑ Ð¾Ð±ÑÑÑниÑÑ, поÑÐµÐ¼Ñ Ð·Ð½Ð°Ñение ÑлеменÑа не пÑÐ¾Ñ Ð¾Ð´Ð¸Ñ Ð²Ð°Ð»Ð¸Ð´Ð°ÑиÑ, еÑли оно не валидно.