2021-06-10 事件委托和event.target

相关概念

  event.target 属性:返回哪个 DOM 元素触发了事件
  事件冒泡:事件从最深的节点开始,然后逐步向上传播事件
  事件委托:把原本需要绑定在子元素的响应事件委托给父元素
  事件委托的好处:减少对DOM的操作

示例

  1.event.target:
    var ul = document.querySelector("ul");
    var lis = document.querySelectorAll("li");
    ul.onclick = function(eve) {
        var target = eve.target || window.target;
        console.log(target); //<li>i</li>
        console.log(target.nodeName); //LI
        if (target.nodeName == 'LI') {
            console.log(target.innerHTML); //li的文本内容
        }
  2.非事件委托:
var lis = document.querySelectorAll("li");
var p = document.querySelector("p");
//通过循环多次绑定子节点达到效果
for (var i = 0; i < lis.length; i++) {
    lis[i].onclick = function(eve) {
        var eve = eve || window.event;//event考虑兼容
        var target = eve.target || window.srcElement;//target考虑兼容
        p.innerHTML = target.style.backgroundColor;;
        p.style.color =target.style.backgroundColor;;
    }
}

  3.用事件委托达到相同效果:
    var ul = document.querySelector("ul");
    var lis = document.querySelectorAll("li");
    var p = document.querySelector("p");
	//不需要通过for循环,减少了dom节点的绑定操作
    ul.onclick = function(eve) {
        var target = eve.target;
        if (target.nodeName == "LI") {
            p.innerHTML = target.style.backgroundColor;
            p.style.color = target.style.backgroundColor;
        }
    }

总结

1.事件绑定到了父节点上,故而省略绑定事件。
2.新增的子节点若也有相关事件,删除部分子节点不用去销毁对应节点上绑定的事件
3.父节点通过event.target来找对应的子节点。
4.事件处理程序中的this值始终等于currentTarget的值,指向绑定到的那个元素
在 JavaScript 中,`$event.target.value` 里的 `target` 是事件对象的一个属性,它指向触发事件的元素。在事件处理过程中,`target` 有着多方面的作用。 `target` 可用于识别触发事件的元素。在处理复杂界面中的事件时,可能多个元素共享同一个事件处理函数,通过检查 `event.target` 就能确定具体是哪个元素触发了事件。比如在一个包含多个按钮的界面里,这些按钮绑定了同一个点击事件处理函数,利用 `event.target` 就能区分出被点击的是哪个按钮[^2]。 对于输入框(`<input>`)或选择框(`<select>`)等表单元素,可使用 `event.target.value` 来获取用户输入的值。在 React 里,处理表单元素变化的事件处理函数(例如 `onChange`)中,常通过 `event.target.value` 获取用户输入的新值[^1][2]。 借助 `target` 还能阻止元素的默认行为。可以通过 `event.target` 访问到触发事件的元素,进而阻止其默认行为,像阻止表单的自动提交或者链接的默认跳转行为等[^2]。 在事件委托模式中,`target` 非常有用。事件委托是在父元素上设置事件监听器,而非在每个子元素上分别设置。当事件触发时,可通过检查 `event.target` 来确定实际触发事件的子元素[^2]。 如果在 HTML 元素上使用 `data-*` 属性存储自定义数据,可通过 `event.target.dataset` 来访问这些数据[^2]。 不过需要注意,在某些情况下,`event.target` 可能并非期望的元素。在事件冒泡或捕获阶段,`event.target` 指向的是最初触发事件的元素,而不是当前正在处理事件的元素。若需要访问当前处理事件的元素,可使用 `event.currentTarget`[^2]。 ```javascript // 示例代码 document.querySelector('button').addEventListener('click', function(event) { console.log('Clicked element:', event.target); console.log('Value of the clicked element:', event.target.value); }); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端OnTheRun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值