一.模拟select下拉菜单的一个动作

    点击显示按钮,显示box,点击document区域,隐藏box

    // var btn = document.querySelector(‘button’);

    // var box = document.querySelector(‘.box’);

    // btn.onclick = function() {

    // box.style.display = ‘block’;

    // };

    // document.onclick = function() {

    // box.style.display = ‘none’;

    // }

    上面的代码是无法实现我们想要的效果的,因为事件冒泡,会把事件逐级向上传递,直到document节点,所以我们的点击事件本来是想让他发生在btn按钮上的,但是因为点击事件向上传递到document节点,所以就和document节点的点击事件合并了,如果两个的点击事件的处理语句有冲突部分,document上的处理语句作为最后加入的处理语句,会将上面与他冲突的处理语句覆盖掉,这也符合JS语句从上至下执行的规定。

    也就是出现冒泡,btn的事件会冒泡到document上面

    二.取消冒泡和捕获:让当前操作的具体元素对象(冒泡元素)的事件不会冒泡到父级(外层)。

    标准取消冒泡和捕获:

    方式一:event.stopPropagation();

    该方式只阻止事件的冒泡,不阻止事件本身。

    方式二:return false;

    该方式不止阻止事件冒泡,还阻止事件本身。

    非标准: event.cancelBubble=true;

    注意:事件冒泡和捕获的前提—事件和事件类型相同 父子元素关系。

    // var btn = document.querySelector(‘button’);

    // var box = document.querySelector(‘.box’);

    // btn.onclick = function(e) {

    // box.style.display = ‘block’;

    // e.stopPropagation(); //取消冒泡

    // };

    // document.onclick = function() {

    // box.style.display = ‘none’;

    // };

    一.普通事件

    普通事件:一个元素对象上面仅能绑定一个事件处理函数,如果绑定多个下面的会覆盖上面的。

    普通事件:也叫DOM 0级事件。

    // var box = document.querySelector(‘.box’);

    // box.onclick = function() {

    // console.log(‘张三同事写的代码’);

    // };

    // box.onclick = function() {

    // console.log(‘李四同事写的代码’);

    // };

    取消普通事件:赋值为null

    // box.onclick = null;

    二.事件绑定(事件侦听)

    事件绑定:也叫DOM 2级事件。DOM 1级事件是个标准或者规范,无需代码实现。

    1.事件绑定:一个元素对象上面可以绑定多个事件处理函数,顺序执行。

    标准浏览器:addEventListener(事件类型,事件处理函数,是否捕获)

    事件类型:不带on,前面不带on字符

    事件处理函数:函数名或者函数体

    是否捕获:默认是冒泡(false),设为true表示捕获。

    // var box = document.querySelector(‘.box’);

    // function zhangsan() {

    // console.log(‘张三同事写的代码’);

    // }

    // box.addEventListener(‘click’, zhangsan);

    // box.addEventListener(‘click’, function() {

    // console.log(‘李四同事写的代码’);

    // });

    // box.addEventListener(‘click’, function() {

    // console.log(‘王五同事写的代码’);

    // });

    2.取消事件绑定

    弊端:如果是匿名的事件处理函数,无法取消的,匿名函数和匿名函数之间无法匹配

    target.removeEventListener(“事件类型”, 函数, 是否捕获(布尔值))

    注意:移除事件监听的参数和添加事件监听的参数是一致的

    // box.removeEventListener(‘click’, zhangsan);

    三.IE浏览器的事件绑定和取消

    target.attachEvent() —IE浏览器事件监听

    target.detachEvent() —IE浏览器取消监听

    总结:

    事件绑定能够取代普通事件,但是反之不行(DOM 2级事件取代DOM 0级事件,反之不行)

    普通的事件使用return false阻止默认行为,事件绑定下面不能使用,只能使用event.preventDefault() 或者event.returnValue = false