На этом шаге мы рассмотрим обработку событий скриптлетом.
Приложение со скриптлетом может получать уведомления о его событиях. DHTML-скриптлет генерирует события одного из двух типов:
DHTML-скриптлет может генерировать любое из следующих стандартных DHTML-событий:
Мы уже говорили, что в число услуг, предоставляемых компонентом Scriptlet Component, входит пересылка в контейнер сгенерированных скриптлетом событий. Например, пользователь дважды щелкнул мышью в теле скриптлета - DHTML-событие ondblclick перехватывает компонент Scriptlet Component, который в свою очередь может передать событие соответствующего типа своему контейнеру. Однако важно понимать, что все это происходит только в случае, когда эти действия явно предусмотрены в коде скриптлета.
Для передачи события из скриптлета в приложение-контейнер надо создать обработчик события соответствующего типа, вызывающий метод bubbleEvent. Этот метод предоставляется Scriptlet Component и доступен через объект window.external.
Вот как в примере из предыдущего шага можно задать обработку двойных щелчков мыши в теле скриптлета:
<BODY ondblclick = passthru()> . . . . </BODY>
Для пересылки события в контейнер определите функцию passthru():
function passthru()
{
if (!window.external.frozen)
window.external.bubbleEvent();
}
Обратите внимание, что перед пересылкой события проверяется состояние свойства frozen компонента Scriptlet Component - это позволяет убедиться в его готовности обработать событие.
Кроме обработки стандартных DHTML-событий, Вы можете заставить скриптлет генерировать специальные события. Их используют для:
Специальные события генерируются вызовом метода raiseEvent в любом месте кода скриптлета. В следующем примере показано, как использовать специальное событие для уведомления приложения-контейнера об изменении цвета фона скриптлета.
<SCRIPT LANGUAGE="JavaScript">
function public_put_backgroundColor(value)
{
window.document.bgColor = value;
if(!window.external.frozen)
window.external. raiseEvent("onbgcolorchange",value);
}
</SCRIPT>
Обратите внимание, что в метод raiseEvent передаются два параметра. Первый указывает на имя события для предоставления контейнеру стандартного интерфейса. Компонент Scriptlet Component передает все специальные события через единственное событие onscriptletevent. Имя сгенерированного события хранится в параметре name. Во втором параметре можно передавать данные, относящиеся к событию.
В следующем коде показано, как Internet Explorer обрабатывает событие onbgcolorchange, сгенерированное в предыдущем примере.
<SCRIPT LANGUAGE="JavaScript" FOR="MyScriptlet"
EVENT="onScriptletevent (event, obj)">
if (event == "onbgcolorchange")
{
msg = "Scriptlet background changed to " + obj;
alert(msg);
}
</SCRIPT>
На следующем шаге мы рассмотрим пример скриптлета.