<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="outDiv" style="width: 100px; height: 200px; background-color: bisque;" contenteditable="true">
外
<div id="innerDiv" style="width: 50px; height: 100px; background-color: aquamarine;" contenteditable="true" oninput="handler2(event)">内</div>
</div>
</body>
<script>
function handler1(e) {
console.log('外', e.target)
}
function handler2(e) {
console.log('内', e.target)
e.stopPropagation()
}
// document.getElementById('outDiv').addEventListener('input', handler1)
// document.getElementById('innerDiv').addEventListener('input', handler2)
</script>
</html>
在以上代码中,当我在innerDiv中输入时,handler2无法触发,handler1总是触发
尝试过在handler2中阻止了事件冒泡,但是似乎因为handler2触发都没触发,所以e.stopPropagation()也无效,我想得到的结果是,在innerDiv中输入时,只触发handler2,在outDiv中输入时,只触发handler1,应该如何优化?
问题出在你使用的是input事件并且用在了contenteditable元素上:
https://developer.mozilla.org/zh-CN/docs/Web/API/Element/inpu...
也就是说你这两个事件的target都是outDiv,自然就会触发handler1了
不信的话你换成onclick事件就会发现正常了
建议你就使用普通的input来搭配oninput