русс | укр

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

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

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

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


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

Искусственные события


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


 

Обе модели обработки событий, DOM Level 2 и IE, позволяют искусственно соз_ давать объекты событий и отправлять их обработчикам событий, зарегистриро_ ванных в элементах документа. В сущности, этот прием используется броузера_ ми для вызова обработчиков событий, зарегистрированных в элементах (и в слу_ чае всплывающих событий обработчиков, зарегистрированных в элементах_ предках). В модели обработки событий DOM Level 0 потребность в искусствен_ ных событиях не так велика, поскольку обработчики событий доступны через различные свойства обработчика. Однако в развитых моделях обработки собы_ тий нет возможности получить список обработчиков, зарегистрированных с по_ мощью addEventListener() или attachEvent(), поэтому обработчики могут быть вызваны только с использованием приема, демонстрируемого в этом разделе.

 

В модели обработки событий DOM искусственное событие создается методом Do_ cument.createEvent(), инициализация события происходит методом Event.init_ Event(), UIEvent.initUIEvent() или MouseEvent.initMouseEvent(), а отправка – мето_ дом dispatchEvent() узла, которому это событие отправляется. В модели обработ_ ки событий IE новый объект события создается методом Document.createEventOb_ ject и затем отправляется методом fireEvent() целевого элемента. В примере 17.8 демонстрируется порядок использования этих методов. Он определяет не зави_ сящую от платформы функцию, которая отправляет искусственные события ти_ па dataavailable, а также функцию, которая регистрирует обработчики событий этого типа.

 

Важно понимать, что искусственные события, отправляемые методом dispatch_ Event() или fireEvent(), не ставятся в очередь для последующей асинхронной об_ работки. Они доставляются немедленно, и их обработчики вызываются синхрон_


 

17.7. Искусственные события
   

 



но еще до того, как dispatchEvent() и fireEvent() вернут управление. Это означа_ ет, что искусственные события не могут использоваться для отложенного испол_ нения программного кода, когда броузер выполнит обработку всех ожидающих событий. Для этого необходимо вызвать метод setTimeout() со значением време_ ни задержки равным нулю.

 

Существует возможность синтезировать и отправлять низкоуровневые события ввода, такие как события мыши, но реакция элементов документа на эти собы_ тия точно не определена. Как правило, полезнее использовать эти возможности для организации высокоуровневых семантических событий, для которых в бро_ узерах не предусматриваются действия по умолчанию. По этой причине в при_ мере 17.8 задействован тип событий dataavailable.

 

Пример 17.8. Отправка искусственных событий

/**

* DataEvent.js: отправляет и принимает события ondataavailable.

 

*

* Этот модуль определяет две функции, DataEvent.send() и DataEvent.receive(),

* с помощью которых выполняются отправка искусственных событий dataavailable

* и регистрация обработчиков этих событий. Программный код написан так, чтобы

* работать в броузере Firefox и других DOM_совместимых броузарах, а также в IE.

 

*

* Модель обработки событий DOM позволяет искусственно генерировать события

* любого типа, но модель обработки событий IE поддерживает искусственные

* события лишь предопределенных типов. События dataavailable относятся

* к наиболее универсальному предопределенному типу, поддерживаемому IE,

* именно потому они здесь используются.

*

* Обратите внимание: отправка события методом DataEvent.send() не означает,

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

* с реальными событиями. Вместо этого зарегистрированные обработчики

* вызываются немедленно.

*/

var DataEvent = {};

 

/**

* Отправляет искусственное событие ondataavailable заданному элементу.

* Объект события включает в себя свойства с именами datatype и data,

* которым присваиваются заданные значения. Свойство datatype принимает

* значение строки или другого элементарного типа (или null),

* идентифицирующего тип этого сообщения, а data может принимать значение

* любого JavaScript_типа, включая массивы и объекты.

*/

DataEvent.send = function(target, datatype, data) {

if (typeof target == "string") target = document.getElementById(target);

 

// Создать объект события. Если создать его невозможно, просто вернуть управление if (document.createEvent) { // Модель событий DOM

// Создать событие с заданным именем модуля событий.

 

// Для событий мыши используется "MouseEvents". var e = document.createEvent("Events");

// Инициировать объект события, используя метод init заданного модуля.

// Здесь указываются тип события, способность к всплытию

// и признак невозможности отмены.


 

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

 

// См. описание Event.initEvent, MouseEvent.initMouseEvent и UIEvent.initUIEvent e.initEvent("dataavailable", true, false);

}

 

else if (document.createEventObject) { // Модель событий IE // В модели событий IE достаточно вызвать простой метод var e = document.createEventObject();

}

else return; // В других броузерах ничего не делать

 

// Здесь к объекту события добавляются нестандартные свойства.

 

// Кроме того, необходимо определить значения существующих свойств. e.datatype = datatype;

 

e.data = data;

 

// Отправить событие заданному элементу.

if (target.dispatchEvent) target.dispatchEvent(e); // DOM

else if (target.fireEvent) target.fireEvent("ondataavailable", e); // IE

};

 

/**

 

* Регистрирует обработчик события ondataavailable в заданном элементе. */

DataEvent.receive = function(target, handler) {

 

if (typeof target == "string") target = document.getElementById(target); if (target.addEventListener)

 

target.addEventListener("dataavailable", handler, false); else if (target.attachEvent)

target.attachEvent("ondataavailable", handler);

};


 



<== предыдущая лекция | следующая лекция ==>
Событие onload | Формы и элементы форм


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


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

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

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


 


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

 
 

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

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