事件绑定的几种方式及区别

1.事件绑定分三种常用的方法:
(1)在DOM元素中直接绑定
(2)在js代码中绑定;
(3)绑定事件监听函数

DOM元素中直接绑定:

<input type='button' onclick='fn()'>
    <script>
        function fn(){
            console.log('hello');
    }           
    </script>

在js代码中直接绑定:
看起来方便,不用再去看html了

    document.getElementById('btn').onclick = function(){
    console.log('hello');
}

绑定事件监听函数addEventListener()或attachEvent()

事件监听:分别定义了3个事件阶段,依次是捕获阶段,目标阶段,冒泡阶段

事件监听chrome浏览器下:
element.addEventListener(DOM事件名,事件触发时执行函数,指定是否是冒泡执行,false是冒泡)

document.getElemengById('btn1').addEventListener('click',aaa);
function aaa(){
    console.log('aaaa');
}

IE标准:
DOM事件名,必须加’on’

element.attachEvent('onclick',aaa);
function aaa(){
    console.log('aaaa');
}

事件监听的优点:
1.可以绑定多个事件

普通事件绑定:

<script>
    var btn = document.getElementById('btn3');
    btn.onmouseover = function(){
        console.log('这个不会执行,被下面的覆盖');
    }
    btn.onmouseover = function(){
        console.log('这个会把上面的绑定事件覆盖,只执行这个')
    } 
</script>

监听事件绑定:addEventListener DOM事件名不加on
attachEvent DOM事件名加on

var btn = document.getElementById('#btn');
    btn.addEventListener('click',a1);
    btn.addEventListener('click',a2);
    function a1(){
        console.log('两个事件都执行');
    }
    function a2(){
        console.log('两个事件都执行');
    }

解除绑定:

这样a2就不执行了
function a2(){
        console.log('不执行了');
    }
btn.removeEventListener('click',a2);

封装完美监听事件

function listen(ele,type,fn){
    if(ele.addEventListener){
        //chrome
        ele.addEventListener(type,fn);
    }else{
        //ie
        ele.attachEvent('on'+type,fn);
    }
}

事件委托:
把事件委托给父元素上,利用冒泡原理,简化代码,提高执行效果,提高处理速度,减少内存占用

var btn = document.getElementById('btn');
document.onclick = function(event){
    event = event || window.event;
    var target = event.target || event.srcElement;
    if(target == 3){
        alert(2);
        alert(1);
    }
}

委托:

var li1 = document.getElementById('li1');
var li2 = document.getElementById('li2');
document.addEventListener('click',function(event){
    var target = event.target;
    if(target == li2){
        alert('li2');
    }
})

可以对动态创建的DOM元素进行事件绑定:
正常遍历绑定事件是无法对新创建的元素进行事件绑定的
而委托却可以

    document.addEventListener('click',function(event){
        var target = event.target;
        if(target.nodeName == 'LI'){
            alert(target.innerHTML);
        }
    })
    //动态添加li
    var node=document.createElement("li");
    var textnode=document.createTextNode("item4");
    node.appendChild(textnode);
    list.appendChild(node);
    //点击item4是有反应的,所以对动态创建的元素有效
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值