<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://lorwiki.zhbert.ru/index.php?action=history&amp;feed=atom&amp;title=XUL%2F%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D0%BC_%D1%81_%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F%D0%BC%D0%B8</id>
	<title>XUL/Работаем с событиями - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://lorwiki.zhbert.ru/index.php?action=history&amp;feed=atom&amp;title=XUL%2F%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D0%BC_%D1%81_%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F%D0%BC%D0%B8"/>
	<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=XUL/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D0%BC_%D1%81_%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F%D0%BC%D0%B8&amp;action=history"/>
	<updated>2026-10-12T23:47:38Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.39.0</generator>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=XUL/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D0%BC_%D1%81_%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F%D0%BC%D0%B8&amp;diff=243&amp;oldid=prev</id>
		<title>Admin: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=XUL/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D0%BC_%D1%81_%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F%D0%BC%D0%B8&amp;diff=243&amp;oldid=prev"/>
		<updated>2023-02-27T18:39:17Z</updated>

		<summary type="html">&lt;p&gt;1 версия импортирована&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 21:39, 27 февраля 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=XUL/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D0%BC_%D1%81_%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F%D0%BC%D0%B8&amp;diff=242&amp;oldid=prev</id>
		<title>lor&gt;Cetjs2: Откат правок 163.172.227.165 (обсуждение) к версии Cetjs2</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=XUL/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D0%BC_%D1%81_%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F%D0%BC%D0%B8&amp;diff=242&amp;oldid=prev"/>
		<updated>2018-05-13T08:34:14Z</updated>

		<summary type="html">&lt;p&gt;Откат правок &lt;a href=&quot;/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/163.172.227.165&quot; title=&quot;Служебная:Вклад/163.172.227.165&quot;&gt;163.172.227.165&lt;/a&gt; (&lt;a href=&quot;/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:163.172.227.165&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Обсуждение участника:163.172.227.165 (страница не существует)&quot;&gt;обсуждение&lt;/a&gt;) к версии &lt;a href=&quot;/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Cetjs2&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Участник:Cetjs2 (страница не существует)&quot;&gt;Cetjs2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;С событиями многие уже хорошо знакомы. События - это некие уведомления низлежащей системы тулкита (underlying system), которая информирует нас о пользовательской активности, системной активности, событиях таймера и т.д. События могут возникать спонтанно, или посылаться целенаправлено самой программой.&lt;br /&gt;
&lt;br /&gt;
==Термины==&lt;br /&gt;
Обычно различают три момента, свойственные распространению событий в приложении:&lt;br /&gt;
&lt;br /&gt;
* '''Capturing''' - захват события другими элементами на его пути к элементу-цели;&lt;br /&gt;
* '''Bubbling''' - всплытие события вверх по дереву элементов, после того, как оно всё-таки добралось до элемента-цели;&lt;br /&gt;
* '''Canceling''' - отмена реагирования элементом по умолчанию при приходе события.&lt;br /&gt;
&lt;br /&gt;
Первые два пункта уже известны Qt программистам. При возникновении события, низлежащая система создаёт объект, и выбрасывает его в мир. Захват есть ни что иное, как перехват события на пути к элементу другими обработчиками (аналогично фильтрам событий в Qt). Перехватчик может запретить событию распространяться дальше. Как только событие всё-таки пришло в пункт назначения, оно может быть обработано. После обработки события тулкит направляет его вверх по дереву элементов, если не указано другое. Это и есть всплытие. Мы можем явно указать тулкиту, что не хотим, чтобы событие всплывало вверх (т.е. утверждение, что ''события не тонут'', неверно - тонут и ещё как :) ). &lt;br /&gt;
&lt;br /&gt;
Описанные здесь интерфейсы и типы событий относятся к DOM2.&lt;br /&gt;
&lt;br /&gt;
При обработке событий в JavaScript используют первый способ, ''Capturing''.&lt;br /&gt;
&lt;br /&gt;
==Базовый интерфейс элемента==&lt;br /&gt;
&lt;br /&gt;
Итак, рассмотрим базовый интерфейс для элемента, который хочет работать с событиями:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
interface EventTarget&lt;br /&gt;
{&lt;br /&gt;
  void       addEventListener(in DOMString type, &lt;br /&gt;
                              in EventListener listener, &lt;br /&gt;
                              in boolean useCapture);&lt;br /&gt;
&lt;br /&gt;
  void       removeEventListener(in DOMString type, &lt;br /&gt;
                                 in EventListener listener, &lt;br /&gt;
                                 in boolean useCapture);&lt;br /&gt;
&lt;br /&gt;
  boolean    dispatchEvent(in Event evt)&lt;br /&gt;
                                raises(EventException);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этот интерфейс наследуется всеми XUL элементами, а это значит, что каждый XUL элемент может подписываться на события. Если мы хотим начать или перестать отслеживать события какого-то объекта, мы должны вызвать именно его методы ''addEventListener'', ''removeEventListener'' или ''dispatchEvent''.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим методы:&lt;br /&gt;
&lt;br /&gt;
* '''addEventListener''' - добавляет фильтр событий&lt;br /&gt;
&lt;br /&gt;
В качестве параметров принимает тип события, обработчик, и булево значение. Булево значение указывает, хочет ли данный обработчик получать событие первым. Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
function func()&lt;br /&gt;
{&lt;br /&gt;
    alert(&amp;quot;We are here&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addEventListener(&amp;quot;load&amp;quot;, func, false);&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь мы установили на глобальный объект ''window'' фильтр на событие ''load'' (загрузка документа) с именем ''func''. Как только документ загрузится, сгенерируется событие ''load'', и выполнится наша функция ''func()''. Можно ставить два одинаковых обработчика на одинаковые элементы, только если последний булев параметр различается. В таком случае снимать обработчики нужно тоже по отдельности (см. ''removeEventListener'').&lt;br /&gt;
&lt;br /&gt;
* '''removeEventListener''' - снимает обработчик&lt;br /&gt;
&lt;br /&gt;
Аргументы аналогичны.&lt;br /&gt;
&lt;br /&gt;
* '''dispatchEvent''' - создаёт событие, как будто оно возникло само&lt;br /&gt;
&lt;br /&gt;
Объект, к которому применяется этот метод, является пунктом назначения события (как уже говорилось выше). Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
function dispatch()&lt;br /&gt;
{&lt;br /&gt;
    var event = document.createEvent('Events');&lt;br /&gt;
    event.initEvent('load', false, false);&lt;br /&gt;
    window.dispatchEvent(event);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function func()&lt;br /&gt;
{&lt;br /&gt;
    alert(&amp;quot;We are here&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addEventListener(&amp;quot;load&amp;quot;, func, false);&lt;br /&gt;
&lt;br /&gt;
setTimeout(&amp;quot;dispatch();&amp;quot;, 3000);&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
По таймеру через 3 секунды вызываем функцию ''dispatch()'', которая создаёт объект события, и передаёт его глобальному объекту ''window''. Т.к. на &lt;br /&gt;
этом объекте уже стоит обработчик ''func()'', то он и вызывается повторно.&lt;br /&gt;
&lt;br /&gt;
===Функция-обработчик===&lt;br /&gt;
&lt;br /&gt;
Функция-обработчик - это функция, которая автоматически вызывается при возникновении события. Она может принимать в качестве аргумента непосредственно сам объект события. Функция, объявленная без параметров, не использует объект события. В этом примере мы передаём объект события в функцию-обработчик:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
function func(evt)&lt;br /&gt;
{&lt;br /&gt;
    alert(evt);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addEventListener(&amp;quot;load&amp;quot;, func, false);&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как только документ загрузится, сгенерируется событие ''load'', и выполнится наша функция ''func()'' с аргументом события, которое мы и показываем в сообщении. Ещё один способ сделать это через замыкание:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
function func(evt)&lt;br /&gt;
{&lt;br /&gt;
    alert(evt);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// сложнее, но по сути тоже самое&lt;br /&gt;
addEventListener(&amp;quot;load&amp;quot;, function(e) { func(e); }, false);&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обработчики-атрибуты===&lt;br /&gt;
&lt;br /&gt;
XUL позволяет задавать обработчики для событий прямо внутри элементов в XUL документе. В этом случае имя атрибута складывается из префикса «''on''» и типа события (''load'', ''mouseover'', ''click'' и т.д.). Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;button label=&amp;quot;click me!&amp;quot; onclick=&amp;quot;alert('Clicked');&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь мы создали обработчик события ''click'', который выводит на экран сообщение ''Clicked''. Другой пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;button label=&amp;quot;click me!&amp;quot; onmouseover=&amp;quot;alert('Over');&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь мы создали обработчик события ''mouseover'', который выводит на экран сообщение ''Over'', когда мышь визуально входит в пространство над кнопкой.&lt;br /&gt;
&lt;br /&gt;
===Объект event===&lt;br /&gt;
&lt;br /&gt;
Объект ''event'' создаётся тулкитом в обработчиках событий, заданных в качестве атрибутов элементов. Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;button label=&amp;quot;click me!&amp;quot; onclick=&amp;quot;alert(event);&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь при щелчке на кнопку мы выводим на экран сообщение с типом полученного события (в данном случае это MouseEvent).&lt;br /&gt;
&lt;br /&gt;
==Базовый интерфейс события==&lt;br /&gt;
&lt;br /&gt;
Базовый интерфейс события выглядит следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
interface Event&lt;br /&gt;
{&lt;br /&gt;
  const unsigned short      CAPTURING_PHASE        = 1;&lt;br /&gt;
  const unsigned short      AT_TARGET              = 2;&lt;br /&gt;
  const unsigned short      BUBBLING_PHASE         = 3;&lt;br /&gt;
&lt;br /&gt;
  readonly attribute DOMString        type;&lt;br /&gt;
  readonly attribute EventTarget      target;&lt;br /&gt;
  readonly attribute EventTarget      currentTarget;&lt;br /&gt;
  readonly attribute unsigned short   eventPhase;&lt;br /&gt;
  readonly attribute boolean          bubbles;&lt;br /&gt;
  readonly attribute boolean          cancelable;&lt;br /&gt;
  readonly attribute DOMTimeStamp     timeStamp;&lt;br /&gt;
&lt;br /&gt;
  void               stopPropagation();&lt;br /&gt;
  void               preventDefault();&lt;br /&gt;
  void               initEvent(in DOMString eventTypeArg, &lt;br /&gt;
                               in boolean canBubbleArg, &lt;br /&gt;
                               in boolean cancelableArg);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Константы определяют в каком состоянии находится сейчас событие. Атрибуты определяют тип события, конечную цель, текущую цель, и др. Интерфейс содержит важные для нас методы:&lt;br /&gt;
&lt;br /&gt;
* '''stopPropagation''' - останавливает распространение события&lt;br /&gt;
&lt;br /&gt;
Остановить распространение события можно как в случае с ''Capturing'', так и в случае с ''Bubbling''. Вызов этого метода означает, что мы больше не хотим, чтобы кто-то ещё обработал данное конкретное событие. &lt;br /&gt;
&lt;br /&gt;
* '''preventDefault''' - отмена действия по умолчанию&lt;br /&gt;
&lt;br /&gt;
Если мы не хотим, чтобы тулкит выполнинл действие по умолчанию для данного события, мы должны вызвать этот метод. Например, создадим кнопку, которая визуально не нажимается, но событие нажатости всё-таки обрабатывается:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;application/x-javascript&amp;quot;&amp;gt;&lt;br /&gt;
function func(evt)&lt;br /&gt;
{&lt;br /&gt;
    evt.preventDefault();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;button label=&amp;quot;click me!&amp;quot;&lt;br /&gt;
        onmousedown=&amp;quot;func(event);&amp;quot;&lt;br /&gt;
        onmouseup=&amp;quot;func(event);&amp;quot;&lt;br /&gt;
        onclick=&amp;quot;alert('Clicked');&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь мы запрещаем тулкиту обрабатывать действие по умолчанию для событий ''mousedown'' и ''mouseup'', которое обычно заключается в отрисовке кнопки в нажатом и отжатом виде, и отрисовке фокуса.&lt;br /&gt;
&lt;br /&gt;
* '''initEvent''' - инициализирует ранее созданный объект события&lt;br /&gt;
&lt;br /&gt;
В качестве аргументов принимает&lt;br /&gt;
&lt;br /&gt;
*# тип события в виде строки («''click''», «''mousedown''», и т.д.);&lt;br /&gt;
*# булево значение, определяющее, может ли событие всплывать;&lt;br /&gt;
*# булево значение, определяющее, можно ли отменять действие по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
// создали объект события&lt;br /&gt;
var event = document.createEvent('Events');&lt;br /&gt;
&lt;br /&gt;
// инициализация&lt;br /&gt;
event.initEvent('mouseover', true, true);&lt;br /&gt;
&lt;br /&gt;
// отсылка какому-либо объекту&lt;br /&gt;
obj.dispatchEvent(event);&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Предопределённые события==&lt;br /&gt;
&lt;br /&gt;
DOM предоставляет пользователю несколько типов предопределённых событий, каждое из которых имеет свои собственные свойства и методы. Рассмотрим их подробнее.&lt;br /&gt;
&lt;br /&gt;
===UIEvent (событие пользовательского интерфейса)===&lt;br /&gt;
&lt;br /&gt;
Имеет такое представление:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
interface UIEvent : Event&lt;br /&gt;
{&lt;br /&gt;
  readonly attribute views::AbstractView  view;&lt;br /&gt;
  readonly attribute long             detail;&lt;br /&gt;
&lt;br /&gt;
  void       initUIEvent(in DOMString typeArg, &lt;br /&gt;
                         in boolean canBubbleArg, &lt;br /&gt;
                         in boolean cancelableArg, &lt;br /&gt;
                         in views::AbstractView viewArg, &lt;br /&gt;
                         in long detailArg);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Типы данного события могут быть «''DOMFocusIn''», «''DOMFocusOut''», «''DOMActivate''».&lt;br /&gt;
&lt;br /&gt;
===MouseEvent (событие мыши)===&lt;br /&gt;
&lt;br /&gt;
Имеет такое представление:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
interface MouseEvent : UIEvent&lt;br /&gt;
{&lt;br /&gt;
  readonly attribute long             screenX;&lt;br /&gt;
  readonly attribute long             screenY;&lt;br /&gt;
  readonly attribute long             clientX;&lt;br /&gt;
  readonly attribute long             clientY;&lt;br /&gt;
  readonly attribute boolean          ctrlKey;&lt;br /&gt;
  readonly attribute boolean          shiftKey;&lt;br /&gt;
  readonly attribute boolean          altKey;&lt;br /&gt;
  readonly attribute boolean          metaKey;&lt;br /&gt;
  readonly attribute unsigned short   button;&lt;br /&gt;
  readonly attribute EventTarget      relatedTarget;&lt;br /&gt;
&lt;br /&gt;
  void       initMouseEvent(in DOMString typeArg, &lt;br /&gt;
                            in boolean canBubbleArg, &lt;br /&gt;
                            in boolean cancelableArg, &lt;br /&gt;
                            in views::AbstractView viewArg, &lt;br /&gt;
                            in long detailArg, &lt;br /&gt;
                            in long screenXArg, &lt;br /&gt;
                            in long screenYArg, &lt;br /&gt;
                            in long clientXArg, &lt;br /&gt;
                            in long clientYArg, &lt;br /&gt;
                            in boolean ctrlKeyArg, &lt;br /&gt;
                            in boolean altKeyArg, &lt;br /&gt;
                            in boolean shiftKeyArg, &lt;br /&gt;
                            in boolean metaKeyArg, &lt;br /&gt;
                            in unsigned short buttonArg, &lt;br /&gt;
                            in EventTarget relatedTargetArg);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как видно, событие мыши наследуется от события ''UIEvent''. Событие мыши включает в себя координаты курсора на экране, координаты курсора относительно элемента, флаги, определяющие состояние клавиш ''Ctrl'', ''Alt'', ''Shift'', номер нажатой кнопки. Номер нажатой кнопки имеет смысл только в обработчике события нажатия или отжатия кнопки («''mousedown''», «''mouseup''»). Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet href=&amp;quot;chrome://global/skin/&amp;quot; type=&amp;quot;text/css&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;window&lt;br /&gt;
    title=&amp;quot;Example&amp;quot;&lt;br /&gt;
    width=&amp;quot;320&amp;quot;&lt;br /&gt;
    height=&amp;quot;200&amp;quot;&lt;br /&gt;
    xmlns=&amp;quot;http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;application/x-javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function func(e)&lt;br /&gt;
{&lt;br /&gt;
    // выводим в шелл сообщение с глобальными координатами&lt;br /&gt;
    // мыши и номером нажатой кнопки&lt;br /&gt;
    dump(e.screenX&lt;br /&gt;
            + &amp;quot;,&amp;quot;&lt;br /&gt;
            + e.screenY&lt;br /&gt;
            + &amp;quot; Mouse button: &amp;quot;&lt;br /&gt;
            + e.button&lt;br /&gt;
            + &amp;quot;\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addEventListener(&amp;quot;mousemove&amp;quot;, func, false);&lt;br /&gt;
addEventListener(&amp;quot;mousedown&amp;quot;, func, false);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/window&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Типы данного события могут быть «''click''», «''mousedown''», «''mouseup''», «''mouseover''», «''mousemove''», «''mouseout''».&lt;br /&gt;
&lt;br /&gt;
===MutationEvent (событие изменения документа)===&lt;br /&gt;
&lt;br /&gt;
Имеет такое представление:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
interface MutationEvent : Event&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // attrChangeType&lt;br /&gt;
  const unsigned short      MODIFICATION       = 1;&lt;br /&gt;
  const unsigned short      ADDITION           = 2;&lt;br /&gt;
  const unsigned short      REMOVAL            = 3;&lt;br /&gt;
&lt;br /&gt;
  readonly attribute Node             relatedNode;&lt;br /&gt;
  readonly attribute DOMString        prevValue;&lt;br /&gt;
  readonly attribute DOMString        newValue;&lt;br /&gt;
  readonly attribute DOMString        attrName;&lt;br /&gt;
  readonly attribute unsigned short   attrChange;&lt;br /&gt;
&lt;br /&gt;
  void       initMutationEvent(in DOMString typeArg, &lt;br /&gt;
                               in boolean canBubbleArg, &lt;br /&gt;
                               in boolean cancelableArg, &lt;br /&gt;
                               in Node relatedNodeArg, &lt;br /&gt;
                               in DOMString prevValueArg, &lt;br /&gt;
                               in DOMString newValueArg, &lt;br /&gt;
                               in DOMString attrNameArg, &lt;br /&gt;
                               in unsigned short attrChangeArg);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Константы определяют, что сейчас произошло - добавление, модификация или удаление. &lt;br /&gt;
&lt;br /&gt;
Свойства:&lt;br /&gt;
&lt;br /&gt;
* '''attrChange''' - тип модификации документа при событии ''DOMAttrModified''&lt;br /&gt;
&lt;br /&gt;
Может быть  MODIFICATION, ADDITION, or REMOVAL.&lt;br /&gt;
&lt;br /&gt;
* '''attrName''' - имя модифицированного элемента при событии ''DOMAttrModified''&lt;br /&gt;
&lt;br /&gt;
* '''newValue''' - новое значение модифицированного элемента при событии ''DOMAttrModified'' и ''DOMCharDataModified''&lt;br /&gt;
&lt;br /&gt;
* '''prevValue''' - прошлое значение модифицированного элемента при событии ''DOMAttrModified'' и ''DOMCharDataModified''&lt;br /&gt;
&lt;br /&gt;
* '''relatedNode'''&lt;br /&gt;
&lt;br /&gt;
Типы данного события могут быть «''DOMSubtreeModified''», «''DOMNodeInserted''», «''DOMNodeRemoved''», «''DOMNodeRemovedFromDocument''», «''DOMNodeInsertedIntoDocument''», «''DOMAttrModified''», «''DOMCharacterDataModified''».&lt;br /&gt;
&lt;br /&gt;
===HTML события===&lt;br /&gt;
&lt;br /&gt;
В XUL есть также возможность обрабатывать HTML события. Поддерживаются следующие типы сообщений:&lt;br /&gt;
&lt;br /&gt;
* '''load''' - загрузка документа завершена;&lt;br /&gt;
* '''unload''' - документ убран из окна или фрейма;&lt;br /&gt;
* '''abort''' - неожиданная остановка загрузки, например остановка загрузки HTML страницы до того, как какое-то изображение успело загрузится;&lt;br /&gt;
* '''error''' - произошла ошибка загрузки документа или выполнения скрипта;&lt;br /&gt;
* '''select''' - пользователь выделил текст в текстовом поле ввода;&lt;br /&gt;
* '''change''' - элемент потерял фокус, и при этом ещё изменился с момента получения фокуса (поле ввода например);&lt;br /&gt;
* '''submit''' - отправка формы;&lt;br /&gt;
* '''reset''' - возврат формы к значениям по умолчанию;&lt;br /&gt;
* '''focus''' - элемент получил фокус;&lt;br /&gt;
* '''blur''' - элемент потерял фокус;&lt;br /&gt;
* '''resize''' - размер контейнера, в котором отображается документ, изменился;&lt;br /&gt;
* '''scroll''' - прокрутка контейнера, в котором отображается документ.&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet href=&amp;quot;chrome://global/skin/&amp;quot; type=&amp;quot;text/css&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;window&lt;br /&gt;
    title=&amp;quot;Example&amp;quot;&lt;br /&gt;
    width=&amp;quot;320&amp;quot;&lt;br /&gt;
    height=&amp;quot;200&amp;quot;&lt;br /&gt;
    xmlns=&amp;quot;http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;button id=&amp;quot;b&amp;quot; label=&amp;quot;click me&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;textbox id=&amp;quot;t&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;application/x-javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function fFocus()&lt;br /&gt;
{&lt;br /&gt;
    dump(&amp;quot;Focus\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function fChange()&lt;br /&gt;
{&lt;br /&gt;
    dump(&amp;quot;Change\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// мы хотим получать события фокуса для кнопки&lt;br /&gt;
document.getElementById(&amp;quot;b&amp;quot;).addEventListener(&amp;quot;focus&amp;quot;, fFocus, false);&lt;br /&gt;
&lt;br /&gt;
// мы также хотим получать события изменения для поля ввода,&lt;br /&gt;
// не забываем, что оно приходит только после потери фокуса,&lt;br /&gt;
// и только если содержимое поля ввода изменилось&lt;br /&gt;
document.getElementById(&amp;quot;t&amp;quot;).addEventListener(&amp;quot;change&amp;quot;, fChange, false);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/window&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Свои события==&lt;br /&gt;
&lt;br /&gt;
Помимо ручного создания и посылки стандартных типов событий, есть возможность создавать свои типы событий, и посылать их элементам, которые смогут эти события обработать. Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
function dispatch()&lt;br /&gt;
{&lt;br /&gt;
    // создаём событие&lt;br /&gt;
    var event = document.createEvent('Events');&lt;br /&gt;
    event.initEvent('myevent', false, false);&lt;br /&gt;
&lt;br /&gt;
    // добавили в событие своё свойство&lt;br /&gt;
    event.customdata = &amp;quot;Hello&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    // отослали событие&lt;br /&gt;
    window.dispatchEvent(event);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function func(evt)&lt;br /&gt;
{&lt;br /&gt;
    // наше событие должно иметь свойство &amp;quot;customdata&amp;quot;,&lt;br /&gt;
    // показываем его в сообщении&lt;br /&gt;
    alert(evt.customdata);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// добавили обработчик своего события&lt;br /&gt;
addEventListener(&amp;quot;myevent&amp;quot;, func, false);&lt;br /&gt;
&lt;br /&gt;
// создаём и посылаем своё событие&lt;br /&gt;
dispatch();&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ссылки==&lt;br /&gt;
* [http://www.w3.org/TR/DOM-Level-2-Events/events.html]&lt;br /&gt;
* [http://www.w3.org/TR/DOM-Level-3-Events/events.html]&lt;br /&gt;
* [http://developer.mozilla.org/en/DOM/]&lt;br /&gt;
* [http://developer.mozilla.org/en/Gecko_DOM_Reference/Examples#Example_5:_Event_Propagation]&lt;br /&gt;
&lt;br /&gt;
[[Category:XUL]]&lt;/div&gt;</summary>
		<author><name>lor&gt;Cetjs2</name></author>
	</entry>
</feed>