js中事件的绑定三种方法

一、在DOM中直接绑定(ontType )

两个特点:
1 兼容性非常好
2 如果调用两次,后面的回调会清除前面的回调
Type指的是事件的名字

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style type="text/css">
        div {
            width:100px;
            height: 100px;
            background-color: #f00;
        }
    </style>
</head>
<body>
    <!-- 事件:如果某一件事情发生在了某一个元素身上以后,允许JS引擎自动的回调函数(Callback) -->
    <div id="the-d"></div>
    <script type="text/javascript">
    //          假定事件的名字时click

    var d=document.querySelector('#the-d'); 

    d.onclick=function(){
        console.log('我被点击了,clcik');
    }

    d.onclick=function(){
        console.log('我又被点击了,为什么要用又');
    }
      <script/>

二、JavaScript代码中直接绑定

在JavaScript中通过查找DOM对象,对其绑定,elementObject.οnclick=function(){} 的格式,举例如下:

<input type="button" value="点我呦"  id="demo">
<script type="text/javascript">

   document.getElementById("demo").onclick=function testAlert(){
      alert("hello world!");
   }
</script>

三、通过事件监听函数绑定

使用 attachEvent(IE方式) 和 addEventListenter(W3C方式) 的好处就是,可以多次的进行事件的绑定,不向原始的方法那样,前面绑定的事件将会被后面的绑定的事件所覆盖,最后只能执行后面所绑定的函数。
1 addEventListener(‘type’ function)
两个特点:
(1) 如果调用两次,都有效
(2)IE8及以下不支持
2 attachEvent(‘onType’,function)
特点;
(1)chrome不支持
(2)在这不会调用,this->window

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style type="text/css">
        div {
            width:100px;
            height: 100px;
            background-color: #f00;
        }
    </style>
</head>
<body>
    <!-- 事件:如果某一件事情发生在了某一个元素身上以后,允许JS引擎自动的回调函数(Callback) -->
    <div id="the-d"></div>
    <script type="text/javascript">
    //          假定事件的名字时click
    var d=document.querySelector('#the-d'); 
      //2 addEventListener('type' function)
    //  两个特点:1 如果调用两次,都有效
    //           2 IE8及以下不支持 
    
    d.addEventListener('click',function(){
            console.log('我被点击了,click');
    });

    d.addEventListener('click',function(){
            console.log('我又被点击了,为什么要用又呢?click');
    });


    //3 attachEvent('onType',function)
    //  特点; 1 chrome不支持
    //         2 在这不会调用,this->window
    
    // d.attachEvent('onclick',function(){
    //         console.log('我又被点击了');
    //         console.log(this);
    //     });


    //问题:是否可以写一个同时兼容IE和Chrome事件的函数?
    function divClick(){
            console.log('我又被点击了!');
    }

    // 兼容模式
    //addEvent函数自己写的
    function addEvent(element, type, func){
        //如果要判断一个对象是否有个成员函数,用这个方法
        if(element.addEventListener){
            element.addEventListener(type,func);
        }else if(element.attachEvent){
           //先变成加上on 变成ontype
            element.attachEvent('on'+type,function(){
                func.call(element);
            });
        }else {
            element['on'+type]=func;
        }
    }

    addEvent(d,'click',divClick);

    //我们希望通过原型的方式
    //对象,都有一个prototype原型对象,任何挂在这个对象上的函数,对象都可以

//     var obj=new Object();
//     console.log(Object.prototype);
//     Object.prototype.wangxiaozhang=function(){
//         console.log('wangxiaozhang says hello');
//     }

//    d.document('click',divClick);
    </script>
</body>
</html>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值