ナンセンスが少なく、例を挙げてください。
コードコピーは次のとおりです。
<script type = "text/javascript">
関数eventutil(){
var _self = this;
///イベントを追加します
var addevent =(function(){
if(document.addeventlistener){
return function(el、type、fn){
El.AddeventListener(Type、FN、False);
}
} それ以外 {
return function(el、type、fn){
el.Attachevent( "on" + type、function(){
return 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();
return [e、ターゲット、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(document、 "click"、function(e){
alert(eventutil.getevent3(e));
});
eventutil.addpropertychangeEvent(document、function(e){
alert(eventutil.getevent3(e));
});
});
</script>
JavaScriptイベント処理は、キャプチャプロセスバブルの3つの段階に分かれています。
例としてボタンをクリックしてください:
キャプチャステージ:外側のレイヤーから内側のレイヤーまで、まずウィンドウに登録されているクリックキャプチャーステージ監視方法を呼び出し、次にボタン自体まで、レイヤーごとにドキュメント、ボディ、親ノードレイヤーを呼び出します。
処理段階:ボタン自体のクリックリスニング方法を呼び出します。
バブルステージ:ボタンから内側のレイヤーから外側の層まで、各レベルで親ノードのバブルステージ監視方法を順番に窓まで呼び出します。
ただし、IE8以下のIEの場合、キャプチャフェーズはサポートされていないため、キャプチャフェーズでのイベントリスニングはまだ一般的ではありません。
通常のイベント処理方法は次のとおりです。
コードコピーは次のとおりです。
function eventhandler(e){
e = e || window.event;
var Target = E.Target || E.SRCELEMENT;
... ...
}
Eはイベントオブジェクトです。イベントがトリガーされると、パラメーターとして渡されます。ただし、IE8以下のバージョンには適用できません。グローバルイベント変数からのみアクセスできます。幸いなことに、2つのイベントが同時に処理される状況はありません。