Шаг 229.
Среда программирования Visual C++.
События скриптлета

    На этом шаге мы рассмотрим обработку событий скриптлетом.

    Приложение со скриптлетом может получать уведомления о его событиях. 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>

    На следующем шаге мы рассмотрим пример скриптлета.




Предыдущий шаг Содержание Следующий шаг