本文共 1803 字,大约阅读时间需要 6 分钟。
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(); }};
测试页面:
阻止事件冒泡
界面:
注意:
事件传递有两种方式:冒泡与捕获。事件传递定义了元素事件触发的顺序。 如果你将
元素插入到
元素, 哪个元素的 “click” 事件先被触发呢?
在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即:
元素的点击事件先触发,然后会触发
在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即:
元素的点击事件。
addEventListener() 方法可以指定 “useCapture” 参数来设置传递类型:
addEventListener(event, function, useCapture);
默认值为 false, 即冒泡传递,当值为 true 时, 事件使用捕获传递。