提问人:Haradzieniec 提问时间:11/23/2022 最后编辑:isherwoodHaradzieniec 更新时间:11/23/2022 访问量:28
有没有办法在 .stopPropagation() 在点击时执行之前捕获点击事件?
Is there a way to catch click events earlier than .stopPropagation() gets executed onclick?
问:
目的是捕获所有点击。遗憾的是,单击第一个链接不会显示在控制台中。有没有办法从页面中抓取链接,即使是那些有的链接?document.body.onclick = e => console.log(e.target);
stopPropagation()
https://jsfiddle.net/htLw9cxy/
function myFuncCanNotBeEdited(e) {
e.stopPropagation();
//...
//and do some other important code here
}
document.body.onclick = e => console.log(e.target);
<body>
<div style="border: 1px solid red; padding: 10px;">
<a href="#" onclick="myFuncCanNotBeEdited(event);">Edit</a>
<a href="#">Remove</a>
</div>
</body>
答:
1赞
Keith
11/23/2022
#1
好吧,这真的很麻烦,所以要小心,因为它涉及修改内置原型。
您可以全局截获原型。stopPropagation
下面我敲出了一个非常简单的片段,您可以扩展以进行更多检查,确保它是一个链接等。
const oStop = PointerEvent.prototype.stopPropagation;
PointerEvent.prototype.stopPropagation = function (e) {
console.log(this.target);
oStop.call(this);
}
function myFuncCanNotBeEdited(e) {
e.stopPropagation();
}
document.body.onclick = e => console.log(e.target);
<body>
<div style="border: 1px solid red; padding: 10px;">
<a href="#" onclick="myFuncCanNotBeEdited(event);">Edit</a>
<a href="#">Remove</a>
</div>
</body>
评论