03-04 事件

一、绑定事件

正常你给一个对象绑定两个相同的事件,下面的会覆盖上面的

image.png

2.如果你用addEventListener的话就解决了

用addEventListener可以同时给一个对象绑定两个相同的事件,且都能输出来

image.png

addEventListener有三个参数,最后那个可不写

image.png

image.png

但是这个函数呢,有兼容性,他只在标准浏览器下可以,在IE下不行,但是呢,有一个方法attachEvent和他正好相反,在IE可以,标准不行,他只有俩参数

image.png
image.png

那么这两个函数,一个只能在标准浏览器下,另一个只能在IE下,怎么才能兼容呢,封装一个函数吧

image.png

到此为止,你以为就完事了?No! 可怕的IE不仅有兼容性问题,还有bug,对,bug,正常来说,在事件里的this都指向绑定事件的对象吧,但在IE里,attachEvent事件里的this指向window

image.png

image.png

image.png

请参照我的另一篇文章this指向问题

解决方案如下

image.png

综上,绑定事件的最终代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件</title>
    <style>
        #div1{
            width: 200px;
            height: 200px;
            background: #ff0;
        }
    </style>
</head>
<body>
    <div id="div1"></div>
    <script>
        var oDiv1 = document.getElementById("div1");
        function addEvent(elem,type,fn,flag){
            if(elem.addEventListener){
                elem.addEventListener(type,fn,flag);
            }else{
                elem.attachEvent("on"+type,function(){
                    fn.call(elem);
                });
            }
        }
        addEvent(oDiv1,"click",function(){
                console.log("111112222");
        },false);

    </script>
</body>
</html>

二、事件冒泡(具体请看另一篇文章事件冒泡)

image.png
image.png

三、键盘事件

image.png
image.png

四、事件源


this和事件源target可不一样哦,
* this是谁绑定的事件,指向谁
* e.target事件源是,谁触发的事件,也就是点击的谁,谁就是事件源,不管他是不是绑定事件的那个
* e.currentTarget 和this是一样滴
image.png

五、阻止浏览器默认行为的事件

我们原先是这么做的 return false
image.png
现在,新学两种阻止浏览器默认行为的】
image.png
image.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>其他事件</title>
</head>
<body>
<a  id="btn" href="http://www.baidu.com">不让他跳转到百度页面</a>
<script>
    // document.onkeydowm = function(e){
    //
    //     var keycode = e.keyCode || window.event.which;
    //     console.log(keycode);
    // }
    //阻止浏览器默认行为的
    var oBtn = document.getElementById("btn");
    oBtn.onclick = function(e){
        e = e || window.event;
        e.preventDefault();
        alert("hhhhhh");
        // e.returnValue = false;
    }

</script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/xuehangongzi/article/details/80465146
今日推荐