JavaScript事件委托案例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/csdnlinyongsheng/article/details/84619369

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <ul id="myLinks">
        <li id="goSomewhere">Go something2</li>
        <li id="doSomething">do something2</li>
        <li id="sayHi">say Hi2</li>
    </ul>
    <script>
        // var myLinks = document.querySelector("#myLinks");
        // myLinks.onclick = function(e)
        // {
        //     var target = e.target;
        //     alert(target.innerHTML);
        // }
        var EventUtil = {
            addHandler: function (element, type, handler) {//添加事件
                if (element.addEventListener) {//使用DOM2级方法添加事件
                    element.addEventListener(type, handler, false);
                } else if (element.attachEvent) {//使用IE方法添加事件
                    element.attachEvent("on" + type, handler);
                } else {
                    element["on" + type] = handler;
                }
            },
            removeHandler: function (element, type, handler) {//取消事件
                if (element.removeEventListener) {
                    element.removeEventListener(type, handler, false);
                } else if (element.detachEvent) {
                    element.detachEvent("on" + type, handler);
                } else {
                    element["on" + type] = null;
                }
            },

            getEvent: function (event) {//使用这个方法跨浏览器取得event对象
                return event ? event : window.event;
            },
            getTarget: function (event) {//返回事件的实际目标
                return event.target || event.srcElement;
            },
            preventDefault: function (event) {//阻止事件的默认行为
                if (event.preventDefault) {
                    event.preventDefault();
                } else {
                    event.returnValue = false;
                }
            },
            stopPropagation: function (event) {//立即停止事件在DOM中的传播
                if (event.stopPropagation) {
                    event.stopPropagation();
                } else {
                    event.cancelBubbles = true;
                }
            },
            getRelatedTarget: function (event) {//获取mouseover和mouseout相关元素
                if (event.relatedTarger) {
                    return event.relatedTarget;
                } else if (event.toElement) {
                    return event.toElement;
                } else if (event.fromElement) {
                    return event.fromElement;
                } else { return null; }

            },
            getButton:function(event){    //获取mousedown或mouseup按下或释放的按钮是鼠标中的哪一个
                if(document.implementation.hasFeature("MouseEvents","2.0")){
                    return event.button;
                }
                else{
                    switch(event.button){   //将IE模型下的button属性映射为DOM模型下的button属性
                        case 0:
                        case 1:
                        case 3:
                        case 5:
                        case 7:
                           return 0;  //按下的是鼠标主按钮(一般是左键)
                        case 2:
                        case 6:
                           return 2;  //按下的是中间的鼠标按钮
                        case 4:
                           return 1;  //鼠标次按钮(一般是右键)
                    }
                }
           },
                 
           getWheelDelta:function(event){ //获取表示鼠标滚轮滚动方向的数值
              if(event.wheelDelta){
                 return event.wheelDelta;
              }else{
                 return -event.detail*40;
              }
           },
                 
           getCharCode:function(event){   //以跨浏览器取得相同的字符编码,需在keypress事件中使用
              if(typeof event.charCode=="number"){
                 return event.charCode;
              }else{
                 return event.keyCode;
              }
           }

        }
        EventUtil.addHandler(window, 'load', function(event){
            var list = document.getElementById("myLinks");
            EventUtil.addHandler(list, 'click', function(event){
                event = EventUtil.getEvent(event);
                var target = EventUtil.getTarget(event);
                switch(target.id)
                {
                    case 'doSomething':
                        document.title = "I change the title!";
                        break;
                    case 'goSomewhere':
                        location.href = "http://www.baidu.com";
                        break;
                    case 'sayHi':
                        alert("Hi!");
                        break;
                }
            })
        })
    </script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/csdnlinyongsheng/article/details/84619369