枯燥的js事件

绑定事件

ele.onclick(事件类型) = function(){}
但只能绑定一个函数
基本等于写在html行间上

<div style="width: 100px; height: 100px; background-color: red;"></div>
<script>
    var  div = document.getElementsByTagName('div')[0];
    div.onclick = function(){
        console.log('a');
        this.onclick=null;//只能执行一次
    }
</script>

ele.addEventListener(‘事件类型’,function(){},false)
能绑定多个函数,并按照顺序执行,但同一个函数不能多次执行

 <div style="width: 100px; height: 100px; background-color: red;"></div>
<script>
    var  div = document.getElementsByTagName('div')[0];
   div.addEventListener('click',function(){
       console.log('a');
   },false)
   
   div.addEventListener('click',function(){
       console.log('b');
   },false)
</script>

ele.attachEvent(‘事件类型’,function(){})
只能在IE上执行。

注意

当绑定事件需要在循环里面执行时,一定要考虑闭包

<ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
<script>
    var li = document.getElementsByTagName('li');
    var len = li.length;
    for(var i = 0 ; i<li.length;i++){
        (function(i){
            li[i].addEventListener('click',function(){
                console.log(i+1);
             },false)
        }(i))
        
    }
</script>

事件处理模型

事件冒泡
结构上(非视觉上)嵌套关系的元素,会存在事件冒泡功能,即同一事件,自子元素冒泡向父元素。(自底向上)
嵌套关系
当点击box的时候,事件会逐渐向父级传递。

<div class="wrapper">
        <div class="demo">
            <div class="box">
                    123
            </div>
        </div>
    </div>

事件捕获
XXXXXXXXXXXXXXXXXX,自父元素捕获至子元素(事件源元素)。(自顶向下)

div.addEventListener('click',function(){
       console.log('a');
   },true)//吧false改成true就是捕获

触发顺序,先捕获,再冒泡


取消冒泡
event.stopPropagation();不支持ie9以下版本

event.onclick = fuction(e){//可以传一个形参。
	e.stopPropagation();
}

IE:e.cancelBubble = true;


阻止默认事件

主要有表单提交,a标签跳转,右键菜单等

1.return false;一对象属性的方式注册的事件才生效 onclick等
2.event.preventDefault(); IE 9 以下不兼容
3.event.returnValue = false; 兼容IE

封装

 function cancelHandler(event){
        if(e.preventDefault){
            e.preventDefault();
        }else{
            e.returnValue = false;
        }
    }

事件源对象

ele.onclick = function(e){
        var event = e || window.event;
        var target = event.target||event.srcElement
        console.log(target);
    }

事件委托
利用事件冒泡,和事件源对象进行处理

<ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
        <li>9</li>
        <li>10</li>
    </ul>
<script>
    var ul = document.getElementsByTagName('ul')[0];
    ul.onclick = function(e){
        var event = e|| window.event;
        var target = event.target||event.srcElement;
        console.log(target.innerText);
    }
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值