русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Фильтрация ввода с клавиатуры


Дата добавления: 2015-07-09; просмотров: 928; Нарушение авторских прав


 

Обработчики событий клавиатуры могут применяться в элементах <input> и <text_ area> для фильтрации ввода, получаемого от пользователя. Например, предполо_ жим, что вы хотите заставить пользователя вводить только прописные символы:

 

Фамилия: <input id="surname" type="text"

onkeyup="this.value = this.value.toUpperCase();">

 

При возникновении события клавиатуры элемент <input> добавляет введенные символы в свое свойство value. К тому моменту, когда произойдет событие keyup, свойство value уже обновится, и потому его можно просто преобразовать его

в верхний регистр. Этот прием работает независимо от положения курсора ввода

 

в текстовом поле, позволяя использовать модель DOM Level 0. Вам не требуется знать, какая клавиша была нажата, а потому не нужно обращаться к объекту со_ бытия. (Обратите внимание: если пользователь вставляет в поле ввода скопиро_ ванный текст с помощью мыши, обработчик события onkeyup не вызывается. Чтобы обработать эту ситуацию, вам, скорее всего, потребуется зарегистриро_ вать обработчик события onchange. Дополнительную информацию об элементах формы и их обработчиках событий вы найдете в главе 18.)

 

Сложнее выполнять фильтрацию событий клавиатуры с использованием обработ_ чика onkeypres, когда необходимо ограничить возможность ввода некоторых сим_ волов, например предотвратить возможность ввода алфавитных символов в поле с числовыми данными. Пример 17.5 содержит определение ненавязчивого моду_ ля, который позволяет выполнять фильтрацию именно такого рода. Он отыски_ вает теги <input type=text>, в которых имеется дополнительный (нестандартный) атрибут с именем allowed. Модуль регистрирует обработчики события keypress для всех таких текстовых полей ввода с целью ограничить возможность ввода символами, перечисленными в атрибуте allowed. В комментарии, расположен_ ном в начале примера 17.5, приводятся некоторые фрагменты HTML_кода, в ко_ торых демонстрируется порядок использования модуля.



 

Пример 17.5. Ограничение возможности ввода определенными наборами символов

/**

* InputFilter.js: ненавязчивая фильтрация нажатий клавиш для тегов <input>

 

*

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

* которые имеют нестандартный атрибут "allowed". Регистрирует обработчик

* события onkeypress для всех таких элементов с целью ограничить возможность

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

* Если элемент <input> имеет при этом атрибут "messageid", значение

* этого атрибута воспринимается как id другого элемента документа.

* Когда пользователь пытается ввести недопустимый символ, отображается

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

* элемент messageid скрывается. Элемент с данным идентификатором предназначен

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

* Изначально этот элемент с помощью CSS_стиля должен быть сделан невидимым.

*

* Далее приводятся некоторые примеры HTML_кода, использующие этот модуль.

* Почтовый индекс:

* <input id="zip" type="text" allowed="0123456789" messageid="zipwarn">


 

17.5. События клавиатуры
   

 

2 <span id="zipwarn" style="color:red;visibility:hidden">Только цифры</span>

 

2 В броузерах, таких как IE, которые не поддерживают addEventListener(),

2 обработчик keypress регистрируется этим модулем за счет переопределения

 

2 возможно существующего обработчика события keypress.

*

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

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

*/

 

(function() { // Весь модуль оформлен в виде анонимной функции // По окончании загрузки документа вызывается функция init()

 

if (window.addEventListener) window.addEventListener("load", init, false); else if (window.attachEvent) window.attachEvent("onload", init);

 

// Найти все теги <input>, для которых необходимо зарегистрировать

// обработчик события

function init() {

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

 

for(var i = 0 ; i < inputtags.length; i++) { // Обойти все теги var tag = inputtags[i];

 

if (tag.type != "text") continue; // Только текстовые поля var allowed = tag.getAttribute("allowed");

if (!allowed) continue; // И только если есть аттрибут allowed

 

// Зарегистрировать функцию_обработчик if (tag.addEventListener)

 

tag.addEventListener("keypress", filter, false); else {

// attachEvent не используется, потому что в этом случае

// функции_обработчику передается некорректное значение

// ключевого слова this.

tag.onkeypress = filter;

}

}

}

 

// Это обработчик события keypress, который выполняет фильтрацию ввода function filter(event) {

 

// Получить объект события и код символа переносимым способом var e = event || window.event; // Объект события клавиатуры

 

var code = e.charCode || e.keyCode; // Какая клавиша была нажата

 

// Если была нажата функциональная клавиша, не фильтровать ее

 

if (e.charCode == 0) return true; // Функциональная клавиша (только Firefox) if (e.ctrlKey || e.altKey) return true; // Нажата Ctrl или Alt

if (code < 32) return true; // Управляющий ASCII_символ

 

// Теперь получить информацию из элемента ввода

 

var allowed = this.getAttribute("allowed"); // Допустимые символы var messageElement = null; // Сообщение об ошибке

 

var messageid = this.getAttribute("messageid"); // id элемента с сообщением, // если есть

 

if (messageid) // Если существует атрибут messageid, получить элемент messageElement = document.getElementById(messageid);

 

// Преобразовать код символа в сам символ


 

444 Глава 17. События и обработка событий

var c = String.fromCharCode(code);

 

// Проверить, принадлежит ли символ к набору допустимых символов if (allowed.indexOf(c) != _1) {

 

// Если c _ допустимый символ, скрыть сообщение, если существует if (messageElement) messageElement.style.visibility = "hidden"; return true; // И принять ввод символа

}

else {

// Если c _ недопустимый символ, отобразить сообщение

 

if (messageElement) messageElement.style.visibility = "visible"; // И отвергнуть это событие keypress

 

if (e.preventDefault) e.preventDefault(); if (e.returnValue) e.returnValue = false; return false;

}

}

})(); // Конец определения анонимной функции и ее вызов.

 



<== предыдущая лекция | следующая лекция ==>
Информация о событиях клавиатуры | Быстрые комбинации клавиш и класс Keymap


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.222 сек.