【发布时间】:2021-09-05 06:45:25
【问题描述】:
我们有一个包含label 和button 的药丸。选择药丸后,我们可以在Delete 或Backspace 键上将其删除。同样可以在药丸中单击按钮时删除。
问题:当我关注药丸中的button 并按下Delete 或Backspace 时,父级事件被触发(onKeyPress 函数被调用)。我面临的问题是当我们在button 上时如何阻止这些键盘事件(删除和退格)被调用。
试过了,preventDefault 和 stopPropagation。似乎没有任何效果。
<span class="pill" tabindex="0">
<span>Pill<span>
<button type="button" class="btn">X</button>
</span>
function onKeyPress(e) {
switch (e.keyCode) {
case 46:
case 8:
e.preventDefault();
handleClose();
break;
default:
break;
}
}
function handleClose() {
console.log('Clear the pill!');
}
document.querySelector('.pill')
.addEventListener('keydown', onKeyPress);
document.querySelector('.btn')
.addEventListener('click', handleClose);
【问题讨论】:
-
你可能只想把
tabindex="-1"放在button上 -
@BCDeWitt 只会停止键盘导航到该按钮,但我仍然可以使用鼠标单击,然后按
Delete或Backspace。 -
我认为你可以通过在父监听函数中添加
if (e.target === document.querySelector('.btn') return来解决这个问题。
标签: javascript html keyboard dom-events