首頁  >  文章  >  web前端  >  javascript中自訂事件

javascript中自訂事件

高洛峰
高洛峰原創
2016-11-16 11:22:351498瀏覽

自訂事件:使用者可以指定事件類型,這個類型其實就是一個字串,然後為這個類型的事件指定事件處理函數,可以註冊多個事件處理函數(用陣列管理),當呼叫時,從多個事件處理函數中找到再呼叫。

function EventTarget(){
            this.handlers={};
        }
 
        EventTarget.prototype={
            constructor:EventTarget,
            addHandler:function(type,handler){
                if(typeof this.handlers[type]=='undefined'){
                    this.handlers[type]=new Array();
                }
                this.handlers[type].push(handler);
            },
            removeHandler:function(type,handler){
                if(this.handlers[type] instanceof Array){
                    var handlers=this.handlers[type];
                    for(var i=0,len=handlers.length;i<len;i++){
                        if(handler[i]==handler){
                            handlers.splice(i,1);
                            break;
                        }
                    }
                }
            },
            trigger:function(event){
                if(!event.target){
                    event.target=this;
                }
                if(this.handlers[event.type] instanceof Array){
                    var handlers=this.handlers[event.type];
                    for(var i=0,len=handlers.length;i<len;i++){
                        handlers[i](event);
                    }
                }
            }
        }

addHandler方法用於新增事件處理程序,removeHandler方法用於移除事件處理程序,所有的事件處理程序在屬性handlers中統一儲存管理。呼叫trigger方法觸發一個事件,該方法接收一個至少包含type屬性的物件作為參數,觸發的時候會尋找handlers屬性中對應type的事件處理程序。寫段程式碼測試一下。

function onClose(event){
            alert(&#39;message:&#39;+event.message);
        }
 
        var target=new EventTarget();
        target.addHandler(&#39;close&#39;,onClose);
 
        //浏览器不能帮我们创建事件对象了,自己创建一个,自定义事件对象的属性
        var event={
            type:&#39;close&#39;,
            message:&#39;Page Cover closed!&#39;
        };
 
        target.trigger(event);


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn