Weniger Unsinn geben Sie einfach den Beispielcode an:
Die Codekopie lautet wie folgt:
<script type = "text/javaScript">
Funktion eventUtil () {
var _self = this;
/// Ereignis hinzufügen
var addEvent = (function () {
if (document.addeventListener) {
Rückgabefunktion (El, Typ, fn) {
El.AddeventListener (Typ, fn, false);
}
} anders {
Rückgabefunktion (El, Typ, fn) {
El.AttacheEvent ("on" + type, function () {
return fn.call (el, window.event);
});
}
}
}) ();
/// Attribute hinzufügen, um das Ereignis zu ändern
var AddPropertyChangeEvent = Funktion (OBJ, FN) {
if (window.activeXObject) {
obj.onpropertychange = fn;
} anders {
obj.addeventListener ("Eingabe", fn, false);
}
}
// Ereignis entfernen
var removent = function (obj, type, fn) {
if (obj.removeventListener) {
obj.removeventListener (Typ, fn, false);
} else if (obj.detacheAvent) {
obj.detacheAvent ("on" + Typ, obj ["on" + type + fn]);
obj ["on" + Typ + fn] = null;
}
}
// Ereignis laden
var loadevent = function (fn) {
var oldonload = window.onload;
if (typeof Oldonload! = "Funktion") {
window.onload = fn;
} anders {
window.onload = function () {
Oldonload ();
fn ();
}
}
}
// Ereignisse blockieren
var stopvent = function (e) {
e = e || Fenster.Event;
if (e.preventDefault) {
E.PreventDefault ();
E.Stoppropagation ();
} anders {
E. returnValue = false;
e.cancelBubble = true;
}
}
// Wenn es nur darum geht, zu verhindern, dass das Ereignis sprudelt
var stoppropagation = function (e) {
e = e || Fenster.Event;
if (!+"/v1") {
e.cancelBubble = true;
} anders {
E.Stoppropagation ();
}
}
// Erhalten Sie das Ereignisquellobjekt
var getEvent1 = Funktion (e) {
e = e || Fenster.Event;
var obj = e.srcelement? e.srcelement: e.target;
Rückkehr obj;
}
// Erhalten Sie das Ereignisquellobjekt
var getEvent2 = Funktion (e) {
if (window.event) return window.event;
var c = getEvent2.caller;
while (c.caller) {
C = C.Caller;
}
return c.Argumente [0];
}
// oder diese Funktion ist leistungsfähiger
var getEvent3 = function (e) {
var e = e || Fenster.Event;
if (! e) {
var c = this.getEvent3.Caller;
while (c) {
e = c.Argumente [0];
if (e && (event == e.constructor || mouseEvent == E. constructor)) {
brechen;
}
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 ();
return [e, target, currentn, parentn, grandn];
}
_self.adDeVent = addEvent;
_self.AddpropertyChangeEvent = AddPropertyChangeEvent;
_self.RemoveEvent = REMEDEVENT;
_self.loadevent = Loadevent;
_self.StopEvent = stopvent;
_self.StopPropagation = StopPropagation;
_self.geEvent1 = getEvent1;
_self.geEvent2 = getEvent2;
_self.geEvent3 = getEvent3;
}
var eventUtil = new eventUtil ();
eventUtil.loadevent (function () {
eventUtil.addevent (Dokument, "Klicken", Funktion (e) {
Alert (EventUtil.GeteEvent3 (e));
});
eventUtil.addpropertyChangeEvent (Dokument, Funktion (e) {
Alert (EventUtil.GeteEvent3 (e));
});
});
</script>
Die Verarbeitung von JavaScript-Ereignissen ist in drei Phasen unterteilt: Erfassungsverarbeitungsbubbles.
Klicken Sie als Beispiel auf die Schaltfläche:
Erfassungsstufe: Rufen Sie von der äußeren Ebene bis zur inneren Ebene zuerst die für das Fenster registrierte Klick -Überwachungsmethode auf, und dokumentieren, Körper, übergeordnete Knoten für Ebene, bis zur Schaltfläche selbst.
Verarbeitungsphase: Rufen Sie die Klick -Hörmethode der Schaltfläche selbst auf.
Bubble -Bühne: Beginnen Sie von der Taste von der inneren Ebene bis zur äußeren Schicht auf die Überwachungsmethode der Blasenstufe der übergeordneten Knoten auf jeder Ebene in Sequenz bis zum Fenster.
Für IE8 und niedrigere IE wird die Erfassungsphase jedoch nicht unterstützt, sodass das Ereignishören in der Erfassungsphase noch nicht üblich ist.
Die übliche Ereignisbearbeitungsmethode lautet:
Die Codekopie lautet wie folgt:
Funktion EventHandler (e) {
e = e || Fenster.Event;
var target = e.target || e.srcelement;
... ...
}
E ist ein Ereignisobjekt. Wenn das Ereignis ausgelöst wird, wird es als Parameter übergeben. Es gilt jedoch nicht für IE8 und niedrigere Versionen von IE. Es kann nur über die globale Ereignisvariable zugegriffen werden. Glücklicherweise wird es keine Situation geben, in der zwei Ereignisse gleichzeitig verarbeitet werden.