js事件绑定

简介: <div class="markdown_views"><p>js 中事件绑定不同的浏览器使用不同的方法,如何做到兼容所有的浏览器呢? <br>火狐浏览器支持document.addEventListener ,但是不支持document.attachEvent. <br>chrome支持document.addEventListener,不支持document.atta

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 时, 事件使用捕获传递。

相关文章
|
5月前
|
JavaScript 前端开发
js事件绑定的几种方式
js事件绑定的几种方式
115 0
|
5月前
|
JavaScript 前端开发
js事件绑定的几种方法?
js事件绑定的几种方法?
|
9月前
|
JavaScript 前端开发 C++
JavaScript 添加事件绑定的三种方法
JavaScript 添加事件绑定的三种方法
429 0
|
JavaScript
13、JS事件(事件绑定、事件流、阻止事件冒泡、取消元素默认行为)
13、JS事件(事件绑定、事件流、阻止事件冒泡、取消元素默认行为)
89 0
|
JavaScript 前端开发
学习javaScript必知必会(4)~事件、事件绑定、取消事件冒泡、事件对象
学习javaScript必知必会(4)~事件、事件绑定、取消事件冒泡、事件对象
137 0
|
JavaScript 前端开发
Javascript事件绑定常见方案详解
Javascript事件绑定常见方案详解让js对用户的操作做出相应的响应,就要对事件进行绑定DOM元素绑定事件处理function函数,不同的操作对应不同的函数名称 常见的三种绑定方式(1)在DOM元素上直接绑定事件(2)在js标签(实现分离)中绑定事件(3)通过DOM lev3级事件绑定标准(事...
1031 0
|
JavaScript 前端开发 安全
|
JavaScript 前端开发
Javascript事件绑定的几种方式
 Javascript的事件绑定主要有四种方法(一下在IE中运行正常,但不保证其他浏览器):   [注:onXXX为某一事件,fun为某一function,domId为某一DOM对象id,event类型见后边附录。
1053 0