JavaScript. Подробное руководство, 6-е издание
Шрифт:
for(var і = 0 ; і < inputelts.length; i++) {
var elt = inputelts[i];
// Пропустить элементы, не являющиеся текстовыми полями ввода
// и не имеющие атрибута data-allowed-chars.
if (elt.type != "text" || !elt.getAttribute(”data-allowed-chars")) continue;
// Зарегистрировать наш обработчик события в этом элементе input
// keypress - старое событие и реализовано во всех броузерах.
// textInput (смешанный регистр символов) поддерживается в Safari
// и Chrome с 2010 года.
// textinput (все символы строчные) - версия проекта
// стандарта "DOM Level 3 Events",
if (elt.addEventListener) {
elt.addEventListener("keypress", filter, false);
elt.addEventListener("textlnput", filter, false);
elt.addEventListened"textinput", filter, false);
}
// textinput не поддерживается версиями IE, в которых не реализован
// метод addEventListener
else {
elt.attachEvent("onkeypress", filter);
}
}
// Обработчик событий keypress и textlnput, фильтрующий ввод пользователя
function filter(event) {
// Получить объект события и целевой элемент target
var е = event || window.event; // Модель стандартная или IE
var target = e.target || e.srcElement; // Модель стандартная или IE
var text = null; // Введенный текст
// Получить введенный символ или текст
if (e.type === "textinput" || e.type === "textlnput")
text = e.data;
else { // Это было событие keypress
// Введенный печатаемый символ в Firefox сохраняется в свойстве charCode
var code = е.charCode || e.keyCode;
// Если была нажата какая-либо функциональная клавиша, не фильтровать ее
if (code < 32 || // Управляющий символ ASCII
е.charCode == 0 || // Функциональная клавиша (в Firefox)
e.ctrlKey || e.altKey) // Удерживаемая клавиша-модификатор
return; // Не фильтровать это событие
// Преобразовать код символа в строку
var text = String.fromCharCode(code);
}
// Отыскать необходимую нам информацию в этом элементе input
var allowed = target.getAttribute("data-allowed-chars");
// Допустимые символы
var messageid = target.getAttribute("data-messageid"); // Сообщение id
if (messageid) // Если указано значение id, получить элемент
var messageElement = document.getElementByld(messageid);
// Обойти в цикле символы во введенном тексте
for(var і = 0; і < text.length; i++) {
var c = text.charAt(i);
if (allowed.indexOf(c) == -1) { // Недопустимый символ?
// Отобразить элемент с сообщением, если указан
if (messageElement) messageElement.style.visibility="visible";
// Отменить действия по умолчанию, чтобы предотвратить вставку текста
if (е.preventDefault) е.preventDefault;
if (е.returnValue) е.returnValue = false;
return false;
}
}
// Если все символы оказались допустимыми, скрыть элемент
// с сообщением, если он был указан.
if (messageElement) messageElement.style.visibility = "hidden";
Поделиться:
Популярные книги
Главбухша
Любовные романы:
остросюжетные любовные романы
5.00
рейтинг книги
Я до сих пор князь. Книга XXII
22. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Неучтенный элемент. Том 6
6. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Принадлежать им
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Газлайтер. Том 3
3. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Законы Рода. Том 6
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Отряд
5. Ермак
Фантастика:
альтернативная история
5.25
рейтинг книги
Запечатанный во тьме. Том 2
2. Хроники Арнея
Фантастика:
уся
эпическая фантастика
фэнтези
5.00
рейтинг книги
Контртеррор
6. Ермак
Фантастика:
альтернативная история
5.00
рейтинг книги
Адепт. Том 1. Обучение
6. Совсем не герой
Фантастика:
фэнтези
9.27
рейтинг книги
Белые погоны
3. Гибрид
Фантастика:
фэнтези
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XIV
14. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
"Дальние горизонты. Дух". Компиляция. Книги 1-25
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Товарищ "Чума" 9
9. Товарищ "Чума"
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00