防止退格导航回来的代码通常需要类似this approach的内容,其中窗口keydown事件被阻止退格,除了一小组已知的元素类型,如Input,TextArea等。< / p>
这对聚合物自定义元素中的元素不起作用,因为keydown事件目标类型是自定义元素的类型,而不是获得keydown的实际元素。每个自定义元素的类型都不同。这使得目标元素类型阻塞退格无法维持。
有没有办法知道聚合物元素中获得按键的实际元素的类型?或者有更好的方法吗?
答案 0 :(得分:2)
尽可能尝试设计项目以避免破坏封装是件好事。这是跨越阴影边界时调整event.target
的原因。
但是,event.path
属性是一个转义符,它包含已经看过事件的所有元素的数组,并且应该允许您解决此问题。
答案 1 :(得分:0)
一种方法是深入了解自定义元素shadow dom(及其阴影dom),以获得真正的活动元素。 这样的东西适用于Chromium 36:
function getActiveElem(target) {
do {
if (target.shadowRoot != null) {
target = target.shadowRoot.activeElement;
}
} while(target.shadowRoot != null);
return target;
}
window.addEventListener("keydown", function(e) {
if (e.keyCode == 8) {
var preventKeyDown;
var d = getActiveElem(e.target); // Get the real active element
switch (d.tagName.toUpperCase()) {
case 'INPUT':
// more smarts here
preventKeyDown = false;
break;
// case TEXTAREA, et al.
}
// e.preventDefault() if preventKeyDown
}
}
答案 2 :(得分:0)
从事件获取元素:DIV,INPUT,TEXTAREA ...
e.target.nodeName