js事件绑定

js 中事件绑定不同的浏览器使用不同的方法,如何做到兼容所有的浏览器呢?
火狐浏览器支持document.addEventListener ,但是不支持document.attachEvent.
chrome支持document.addEventListener,不支持document.attachEvent
IE支持document.addEventListener,不支持document.attachEvent
为了兼容多浏览器,我们进行了封装:

var addEvent = (function () {
    if (document.addEventListener) {
        return function (type, element, fun) {
            element.addEventListener(type, fun, false);
        }
    }
    else if (document.attachEvent) {
        return function (type, element, fun) {
            element.attachEvent('on' + type, fun);
        }
    }
    else {
        return function (type, element, fun) {
            element['on' + type] = fun;
        }
    }
})();
var removeEvent = (function () {
    if (document.removeEventListener) {
        return function (type, element, fun) {
            element.removeEventListener(type, fun, false);
        }
    }
    else if (document.detachEvent) {
        return function (type, element, fun) {
            element.detachEvent('on' + type, fun);
        }
    }
    else {
        return function (type, element, fun) {
            element['on' + type] = null;
        }
    }
})();

下面是阻止事件冒泡的方法:

/***
 * 阻止事件冒泡
 * @param event
 */
var cancelBubble = function cancelBubble(event) {
    if (event === undefined) {
        event = window.event;
    }
    if (event.stopPropagation === undefined) {
        event.cancelBubble();
    } else {
        event.stopPropagation();
    }
};

测试页面:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>阻止事件冒泡</title>
    <script src="common_util.js" type="application/javascript"></script>
</head>
<body>
<div id="outDiv"  style="width: 200px;height: 50px;background-color: #9a9afb" >
    <input type="button" id="myBtn" value="点我啊" />
</div>
<input type="button" id="cancelBtn" value="取消按钮事件" />
<script type="application/javascript">
    var count=1;
    var button_func=function (event) {
        cancelBubble(event);
        console.log('this is button '+(count++));
    };
    addEvent('click',com.whuang.hsj.$$id('outDiv'), function (event) {
        console.log('this is div'+(count++));
    })
    addEvent('click',com.whuang.hsj.$$id('myBtn'), button_func);
    addEvent('click',com.whuang.hsj.$$id('cancelBtn'), function (event) {
        removeEvent('click',com.whuang.hsj.$$id('myBtn'),button_func);
    })
</script>
</body>
</html>

界面:
js事件绑定和解绑

注意:
事件传递有两种方式:冒泡与捕获。

事件传递定义了元素事件触发的顺序。 如果你将

元素插入到

元素中,用户点击

元素, 哪个元素的 “click” 事件先被触发呢?

在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即:

元素的点击事件先触发,然后会触发

元素的点击事件。

在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即:

元素的点击事件先触发 ,然后再触发

元素的点击事件。

addEventListener() 方法可以指定 “useCapture” 参数来设置传递类型:

addEventListener(event, function, useCapture);
默认值为 false, 即冒泡传递,当值为 true 时, 事件使用捕获传递。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值