Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

}

// Вспомогательная функция, используемая в обработчиках ondragenter и ondragleave.

// Возвращает true, если элемент а является дочерним по отношению к элементу b.

function ischild(a,b) {

for(; а; а = a.parentNode)

if (а === b) return true;

return false;

}

}

});

17.8.

События ввода текста

Броузеры поддерживают три старых события ввода с клавиатуры. События «keydown» и «keyup» являются низкоуровневыми событиями и рассматриваются в следующем разделе. Однако событие «keypress» является высокоуровневым, сообщающим, что был введен печатаемый символ. Проект спецификации «DOM Level 3 Events» определяет более обобщенное событие «textinput», генерируемое в ответ на ввод текста, независимо от того, каким способом он был введен (например, с клавиатуры, копированием данных из буфера обмена или с помощью операции буксировки, методом ввода текста на азиатских языках или с помощью системы распознавания речи или распознавания рукописного текста). На момент написания этих строк событие «textinput» еще не поддерживалось, но броузеры на основе ядра Webkit поддерживали очень похожее событие «textInput» (с заглавной буквой «I»).

С предлагаемым событием «textinput» и реализованным в настоящее время событием «textInput» передается простой объект события, имеющий свойство

data
, хранящее введенный текст. (Другое предлагаемое спецификацией свойство,
inputMethod
, должно определять источник ввода, но оно пока не реализовано.) В случае ввода с клавиатуры свойство
data
обычно будет содержать единственный символ, но при вводе из других источников в нем может содержаться множество символов.

Объект события, передаваемый с событием «keypress», имеет более сложную организацию. Событие «keypress» представляет ввод единственного символа. Этот символ содержится в объекте события в виде числового значения кодового пункта Юникода и, чтобы преобразовать его в строку, необходимо использовать метод

String.fromCharCode
. В большинстве броузеров кодовый пункт введенного символа сохраняется в свойстве
keyCode
объекта события. Однако по историческим причинам в Firefox вместо него используется свойство
charCode
. В большинстве броузеров событие «keypress» возбуждается только при вводе печатаемого символа. Однако в Firefox событие «keypress» возбуждается также для непечатаемых символов. Чтобы отличить эти два случая (и проигнорировать непечатаемые символы), можно проверить, существует ли свойство
charCode
объекта события и содержит ли оно значение 0.

События «textinput», «textinput» и «keypress» можно отменить, чтобы предотвратить ввод символа. То есть эти события можно использовать для фильтрации ввода. Например, можно предотвратить ввод алфавитных символов в поле, предназначенное для ввода числовых данных. В примере 17.6 демонстрируется модуль на языке JavaScript, реализующий такого рода фильтрацию. Он отыскивает элементы

<input type=text>
с дополнительным (нестандартным) атрибутом
data-allowed-chars
. Регистрирует обработчики событий «textinput», «textInput» и «keypress» для всех найденных элементов и ограничивает возможность ввода символами, перечисленными в атрибуте
data-allowed-chars
. Первый комментарий в начале примера 17.6 включает образец разметки HTML, использующей этот модуль.

Пример 17.6. Фильтрация ввода пользователя

/**

* InputFilter.js: фильтрация ввода для элементов <input>

*

* Этот модуль отыскивает все элементы <input type="text"> в документе, имеющие

* атрибут "data-allowed-chars". Регистрирует обработчики событий keypress, textinput

* и textinput для этих элементов, чтобы ограничить набор допустимых для ввода символов,

* чтобы разрешить вводить только символы, указанные в атрибуте. Если элемент <input>

* также имеет атрибут "data-messageid", значение этого атрибута интерпретируется как id

* другого элемента документа. Если пользователь вводит недопустимый символ, элемент

* с указанным id делается видимым. Если пользователь вводит допустимый символ, элемент

* с сообщением скрывается. Данный элемент с сообщением предназначается для вывода

* пояснений, почему ввод пользователя был отвергнут. Его оформление необходимо

* реализовать с помощью CSS так, чтобы изначально он был невидим.

*

* Ниже приводится образец разметки HTML, использующей этот модуль.

* Zipcode: <input id="zip” type="text"

* data-allowed-chars="0123456789" data-messageid="zipwarn">

* <span id="zipwarn" style="color: red; visibility: hidden">TonbKo цифры</зрап>

*

* Этот модуль полностью реализован в ненавязчивом стиле: он не определяет

* никаких переменных в глобальном пространстве имен.

*/

whenReady(function { // Вызовет эту функцию, когда документ будет загружен

// Отыскать все элементы <input>

var inputelts = document.getElementsByTagName("input");

// Обойти их в цикле

Поделиться:
Популярные книги

Легенды и мифы Древнего Востока

Овчинникова Анна Георгиевна
Древний мир
Документальная литература:
биографии и мемуары
6.25
рейтинг книги
Легенды и мифы Древнего Востока

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец

Александр Великий или Книга о Боге

Дрюон Морис
Проза:
историческая проза
8.20
рейтинг книги
Александр Великий или Книга о Боге

Андер Арес

Грехов Тимофей
1. Андер Арес
Фантастика:
рпг
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Андер Арес

Ричард Длинные Руки – эрцфюрст

Орловский Гай Юлий
Фантастика:
фэнтези
5.00
рейтинг книги
Ричард Длинные Руки – эрцфюрст

An ordinary sex life

Астердис
Любовные романы:
современные любовные романы
love action
5.00
рейтинг книги
An ordinary sex life

Место

Горенштейн Фридрих Наумович
Проза:
современная проза
5.00
рейтинг книги
Место

Тайная история американской империи: Экономические убийцы и правда о глобальной коррупции

Перкинс Джон
Документальная литература:
публицистика
8.33
рейтинг книги
Тайная история американской империи: Экономические убийцы и правда о глобальной коррупции

Последний реанорец. Том IV

Павлов Вел
3. Высшая Речь
Фантастика:
фэнтези
5.20
рейтинг книги
Последний реанорец. Том IV

Йога т4

Васиштха
5.00
рейтинг книги
Йога т4

Разбитое окно

Дивер Джеффри
8. Райм и Сакс
Детективы:
прочие детективы
7.75
рейтинг книги
Разбитое окно

Великие мифы и легенды. 100 историй о подвигах, мире богов, тайнах рождения и смерти

Мудрова Ирина Анатольевна
Старинная литература:
мифы. легенды. эпос
5.00
рейтинг книги
Великие мифы и легенды. 100 историй о подвигах, мире богов, тайнах рождения и смерти

Том 3. Советский и дореволюционный театр

Луначарский Анатолий Васильевич
3. Собрание сочинений в восьми томах
Документальная литература:
критика
5.00
рейтинг книги
Том 3. Советский и дореволюционный театр

Кодекс Охотника. Книга XVII

Винокуров Юрий
17. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVII