【发布时间】:2019-02-19 03:49:58
【问题描述】:
我已经搜索了一段时间;但只能找到 Polymer 的答案;
或答案将 EventListeners 放置在 shadowRoot 内部的 DOM 元素上。
我尝试使用原生自定义元素实现的效果:
- 只有焦点元素应该接受(并显示)按键
可以将点击事件附加到shadowRoot,看来我为'keyup'事件做错了。
如果我将EventListener 放在window 上,所有元素(当然)都会使用相同的密钥信息进行更新。
window.customElements.define('game-toes', class extends HTMLElement {
constructor() {
super();
let shadowRoot=this.attachShadow({mode: 'open'});
shadowRoot.innerHTML = this.tabIndex;
shadowRoot.addEventListener('keyup',evt=>this.shadowRoot.innerHTML = 'key:'+evt.key);
}
});
game-toes{
display:inline-block;
height:auto;
width:100px;
padding:1em;
border:10px solid green;
}
game-toes:focus {
background-color: lightgreen;
}
<game-toes tabindex=1></game-toes>
<game-toes tabindex=2></game-toes>
<game-toes tabindex=3></game-toes>
【问题讨论】:
-
我认为你不能在不可聚焦的元素上注册 keyup 事件,除非你用
<div tabindex="0">之类的东西来破解它
标签: javascript dom-events addeventlistener shadow-dom custom-element