天天看點

三、event 和 event.target(目标元素) 和短路運算以及 組織預設行為、阻止冒泡、事件委托...

//組織預設行為
    preventDefault:function(event){
        var event = $$.getEvent(event);
        if(event.preventDefault){
            event.preventDefault();
        }else{
            event.returnValue = false;
        }
    },
    //阻止冒泡
    stopPropagation:function(event){
        var event = $$.getEvent(event);
        if(event.stopPropagation){
            event.stopPropagation();
        }else{
            event.cancelBubble = true;
        }
    }      
//事件對象
    getEvent:function(event){
        return event?event:window.event;
    },
    //擷取目标
    GetTarget :function(event){
        var e = $$.getEvent(event);
        return e.target|| e.srcElement;
    },
    //組織預設行為
    preventDefault:function(event){
        var event = $$.getEvent(event);
        if(event.preventDefault){
            event.preventDefault();
        }else{
            event.returnValue = false;
        }
    },
    //阻止冒泡
    stopPropagation:function(event){
        var event = $$.getEvent(event);
        if(event.stopPropagation){
            event.stopPropagation();
        }else{
            event.cancelBubble = true;
        }
    }      
//事件委托
    delegate:function (pid, eventType, selector, fn) {
        //參數處理
        var parent = $$.$id(pid);
        function handle(e){
            var target = $$.GetTarget(e);
            if(target.nodeName.toLowerCase()=== selector || target.id === selector || target.className.indexOf(selector) != -1){
                // 在事件冒泡的時候,回以此周遊每個子孫後代,如果找到對應的元素,則執行如下函數
                // 為什麼使用call,因為call可以改變this指向
                // 大家還記得,函數中的this預設指向window,而我們希望指向目前dom元素本身
                fn.call(target);
            }
        }
        //當我們給父親元素綁定一個事件,他的執行順序:先捕獲到目标元素,然後事件再冒泡
        //這裡是是給元素對象綁定一個事件
        parent[eventType]=handle;
    }      

轉載于:https://www.cnblogs.com/yexiangwang/p/5967827.html