Меньше чепухи, просто приведите пример кода:
Кода -копия выглядит следующим образом:
<script type = "text/javascript">
function eventutil () {
var _self = это;
/// Добавить событие
var addEvent = (function () {
if (document.addeventlistener) {
возврат функции (el, type, fn) {
el.addeventlistener (type, fn, false);
}
} еще {
возврат функции (el, type, fn) {
el.attachevent ("on" + type, function () {
вернуть fn.call (el, window.event);
});
}
}
}) ();
/// Добавить атрибуты для изменения события
var AddPropertyChangeEvent = function (obj, fn) {
if (window.activexobject) {
obj.onpropertychange = fn;
} еще {
obj.addeventlistener ("input", fn, false);
}
}
// Удалить событие
var removeEvent = function (obj, type, fn) {
if (obj.removeeventlistener) {
obj.removeeventlistener (type, fn, false);
} else if (obj.detachevent) {
obj.detachevent ("on" + type, obj ["on" + type + fn]);
obj ["on" + type + fn] = null;
}
}
// Загрузка события
var loadevent = function (fn) {
var oldonload = window.onload;
if (typeof oldonload! = "function") {
window.onload = fn;
} еще {
window.onload = function () {
OldonLoad ();
fn ();
}
}
}
// Блок событий
var stopevent = function (e) {
E = E || window.event;
if (e.preventdefault) {
e.preventdefault ();
e.stoppropagation ();
} еще {
E. ReturnValue = false;
e.cancelbubble = true;
}
}
// Если это просто чтобы предотвратить пузырьковое событие
var stoppropagation = function (e) {
E = E || window.event;
if (!+"/v1") {
e.cancelbubble = true;
} еще {
e.stoppropagation ();
}
}
// Получить объект источника события
var getEvent1 = function (e) {
E = E || window.event;
var obj = e.srcelement? E.Srcelement: E.Target;
вернуть OBJ;
}
// Получить объект источника события
var getEvent2 = function (e) {
if (window.event) return window.event;
var c = getevent2.caller;
while (c.caller) {
c = C.Caller;
}
вернуть C.Arguments [0];
}
// или эта функция более мощная
var getEvent3 = function (e) {
var e = e || window.event;
if (! e) {
var c = this.getevent3.caller;
while (c) {
e = c.arguments [0];
if (e && (event == e.constructor || mouseevent == e.constructor)) {
перерыв;
}
c = C.Caller;
}
}
var target = e.srcelement? E.Srcelement: E.Target,
currentn = target.nodename.tolowercase (),
parentn = target.parentnode.nodename.tolowercase (),
grandn = target.parentnode.parentnode.nodename.tolowercase ();
вернуть [e, target, currentn, parentn, grandn];
}
_self.addevent = addEvent;
_self.addpropertyChangeEvent = addPropertyChangeEvent;
_self.removeevent = removeEvent;
_self.loadevent = loadevent;
_self.stopevent = stopevent;
_self.stoppropagation = stoppropagation;
_self.getEvent1 = getEvent1;
_self.getEvent2 = getEvent2;
_self.getEvent3 = getEvent3;
}
var Eventutil = new EventUtil ();
Eventutil.loadeVent (function () {
EventUtil.Addevent (документ, "Click", function (e) {
Alert (Eventutil.getEvent3 (e));
});
Eventutil.addpropertyChangeEvent (Document, Function (e) {
Alert (Eventutil.getEvent3 (e));
});
});
</script>
Обработка событий JavaScript разделена на три этапа: пузырьки с захватом.
Принимайте нажатие кнопки в качестве примера:
Стадия захвата: от внешнего слоя до внутреннего слоя сначала вызовите метод мониторинга на стадии захвата щелчка, зарегистрированный для окна, затем документируйте, тело, родительские узлы слой по слою, вплоть до самой кнопки.
Фаза обработки: вызовите метод прослушивания нажимания самой кнопки.
Стадия пузыря: Начиная с кнопки, от внутреннего слоя до внешнего слоя, вызовите метод мониторинга стадии пузырька родительских узлов на каждом уровне в последовательности до окна.
Однако для IE8 и Нижнего IE фаза захвата не поддерживается, поэтому прослушивание событий в фазе захвата еще не распространено.
Обычный метод обработки событий:
Кода -копия выглядит следующим образом:
функция EventHandler (e) {
E = E || window.event;
var target = e.target || E.srcelement;
... ...
}
e - объект события. Когда событие запускается, оно передается как параметр. Тем не менее, это не применимо к IE8 и нижним версиям IE. К нему можно получить доступ только через глобальную переменную события. К счастью, не будет ситуации, когда два события обрабатываются одновременно.