Атрибут spellcheck в HTML: проверка орфографии

Атрибут spellcheck включает или выключает проверку орфографии в редактируемом тексте. Это глобальный атрибут - его можно прописать любому тегу, но реальный эффект он даёт только там, где текст можно редактировать: в <textarea>, в полях ввода и в элементах с contenteditable.

HTML
<textarea spellcheck="true">Текст с ошибками подчеркнёт браузер</textarea>

Атрибут spellcheck в HTML: что делает и какие значения принимает

spellcheck принимает всего два значения - true и false, и оба нужно прописывать явно: в этом его отличие от булевых атрибутов, где достаточно самого имени.

ЗначениеЧто происходит
true (или пустая строка)Элемент проверяется на орфографические ошибки, если это вообще возможно
falseПроверка выключена для этого элемента
Атрибут не указанПоведение зависит от конкретного элемента и браузера - подробнее в следующем разделе

Пример: spellcheck="true" и spellcheck="false" рядом

Результат

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

Что проверяется без атрибута: textarea, input и contenteditable

Без явного атрибута решение принимает браузер - и здесь легко ошибиться: распространённое мнение, что <input> по умолчанию не проверяется, а проверяются только <textarea> и contenteditable. На деле это не так: у большинства типов <input> (text, email, url, search, number и других) проверка по умолчанию включена точно так же, как у textarea и contenteditable. Исключение - type="password": у него проверка орфографии отключена браузером по умолчанию, что логично - проверять орфографию в пароле бессмысленно.

Пример: свойство .spellcheck у разных полей без атрибута

Результат

Единственное исключение - password: у остальных полей и у contenteditable проверка включена сама по себе, даже без атрибута в разметке.

Наследование spellcheck от родителя

Если у элемента нет собственного атрибута spellcheck, он наследует состояние от ближайшего предка, у которого оно задано явно. Это удобно, когда нужно выключить проверку сразу для целого блока формы, не прописывая false на каждом поле отдельно - достаточно поставить spellcheck="false" на общий контейнер.

Пример: наследование от родительского контейнера

HTML
<div spellcheck="false">
  <div contenteditable="true">Наследует false от родителя</div>
</div>
Результат

У вложенного блока нет своего атрибута - он берёт значение от ближайшего предка, где оно указано явно.

Это подсказка браузеру, а не гарантия проверки

Спецификация прямо описывает spellcheck как подсказку браузеру, а не требование: браузер не обязан проверять орфографию, даже если атрибут равен true. На нередактируемых элементах (обычный текст, заголовок, абзац без contenteditable) проверка не включается в принципе, сколько ни прописывай им spellcheck="true" - проверять там попросту нечего, текст нельзя изменить.

Безопасность: зачем иногда выключать spellcheck намеренно

Обычная проверка орфографии в браузере работает локально, по встроенному словарю, и ничего никуда не отправляет. Но у части браузеров есть режим «расширенной» проверки, который присылает содержимое поля на сервер - и в прошлом это становилось источником реальных утечек: в поля с паролями и платёжными данными такая проверка иногда попадала вместе с остальным текстом формы, если браузер не делал для них исключения. Из соображений безопасности на полях с чувствительными данными - пароль, номер карты, код из смс - spellcheck="false" лучше прописывать явно, а не полагаться на то, что браузер и так выключит проверку по умолчанию.

Частые ошибки с атрибутом spellcheck

С самим атрибутом spellcheck путаницы немного - сложности начинаются там, где от него ожидают больше, чем он даёт.

ОшибкаЧто происходитКак исправить
Пишут spellcheck без значения и ждут ошибку валидатораПустая строка - допустимое значение, равнозначное true, это не ошибка разметкиПисать явно true или false, если нужна конкретика, а не полагаться на короткую запись
Прописывают spellcheck="true" на обычный текстовый блок без contenteditableЭлемент нередактируем, проверять в нём нечего - атрибут не даёт никакого эффектаПрименять spellcheck только к редактируемым элементам: textarea, input, contenteditable
Считают, что все input по умолчанию не проверяютсяНа деле не проверяется по умолчанию только type="password" - остальные типы проверяются как textareaДля чувствительных полей (не только пароль) выключать проверку явным false
Ожидают, что spellcheck="true" гарантированно подчеркнёт ошибкиЭто лишь подсказка - конкретный браузер и ОС вправе вообще не проверять орфографиюНе полагаться на spellcheck как на обязательную проверку текста
Не выключают spellcheck на полях с паролями и номерами картРасширенная проверка орфографии в части браузеров отправляет текст поля на серверПрописывать spellcheck="false" явно на всех чувствительных полях

Шпаргалка по атрибуту spellcheck

ПравилоЧто запомнить
Где работаетНа любом теге (глобальный атрибут), эффект - только на редактируемых
true / пустая строкаПроверка орфографии включена, если браузер её поддерживает
falseПроверка выключена для этого элемента
Атрибут не указанtextarea, input (кроме password) и contenteditable проверяются по умолчанию
type="password"Единственный тип input, не проверяемый по умолчанию
НаследованиеЭлемент без своего атрибута берёт значение ближайшего предка
ГарантияЭто подсказка браузеру, а не обязательная проверка
БезопасностьНа полях с паролями, картами, кодами прописывать spellcheck="false" явно
Категория
Поделиться в социальных сетях

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

0 Комментарии

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

#buttons=(Хорошо) #days=(20)

Мы используем файлы cookie для улучшения работы сайта. Подробнее
Хорошо
×