Event对象的常见应用

1、event.preventDefault()

用于取消事件的默认行为,将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作)。
例如,如果 type 属性是 "submit"的表单提交,a标签的默认行为是跳转到对应的URL,在事件传播的任意阶段可以调用任意的事件句柄,通过调用该方法,可以阻止提交表单和链接跳转。
注意,如果 Event 对象的 cancelable 属性是 fasle,那么就没有默认动作,或者不能阻止默认动作。无论哪种情况,调用该方法都没有作用。


2、event.stopPropagation()

该方法用于阻止事件的冒泡,不让事件从子元素向父元素及上层元素冒泡,但是默认事件仍让会执行,比如a标签的跳转行为仍然会执行。
注意,使用 event.preventDefault() 可以取消事件的默认行为,但不能阻止事件冒泡,而使用 event.stopPropagation() 能阻止事件冒泡却不能取消事件的默认行为。如果既想取消事件的默认行为,又想阻止事件冒泡,则可以直接用 return false


3、event.stopImmediatePropagation()

当使用 addEventListener 在同一个元素上绑定多个相同类型事件的事件监听函数时,比如先后绑定了click事件A 和 click事件B。
正常情况下,我点击元素会先触发事件A,然后再触发事件B,但有时候我就只想触发事件A,而不想触发事件B,那该怎么办呢?
这时就可以在事件A的处理函数中添加 event.stopImmediatePropagation() ,即可让剩下的监听函数不会被执行,包括事件冒泡行为。


4、event.target 和 event.currentTarget

target:触发事件的元素
currentTarget:事件绑定的元素

两者在没有冒泡的情况下,是一样的值,但在用了事件委托的情况下,就不一样了:
event.target 是引发事件的 目标元素(原始点击位置),它在冒泡过程中不会发生变化。
event.currentTarget 是当前正在执行的监听函数所在的那个节点,在冒泡过程中值会发发生变化, event.currentTarget === thisthis 指向触发事件的内部那个绑定监听函数的元素节点对象)。

举例1:

<ul id="ul">
    <li class="item1">li item1</li>
    <li class="item2">li item2</li>
    <li class="item3">li item3</li>
</ul>

<script>
    var ul = document.getElementById("ul")
    ul.addEventListener('click', function (event) {
        console.log(this);
        console.log(event.target); // 点击哪个li就获取那个对应的li对象
        console.log(event.currentTarget); // 每次都是最外层的ul对象,完全等于this
        console.log("------------------");
    }, false);
</script>

在这里插入图片描述

举例2:

<form id="form">
    FORM
    <div>
        DIV
        <p>P</p>
    </div>
</form>

<script>
    var form = document.querySelector('#form')
    form.addEventListener('click', function (e) {
        console.log("target = " + e.target.tagName);
        console.log("this = " + this.tagName);
        console.log("currentTarget = " + e.currentTarget.tagName);
        var i
        var child = e.target.children
        for (i = 0; i < child.length; i++) {
            if (child.length < 1) return
            else {
                // 设置e.target的children所有的元素节点的背景颜色的值为 #fff
                child[i].style.backgroundColor = '#fff'
            }
        }
        // 设置e.target的背景颜色的值为 pink
        e.target.style.backgroundColor = 'pink'
    })
</script>

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值