防止退格导航返回的代码通常采用类似于这种方法的方法,即除了Input、TextArea等一小部分已知元素类型之外,窗口keydown事件会被阻止退格。
这对聚合物自定义元素中的元素不太适用,因为keydown事件目标类型是自定义元素的类型,而不是获得keydown的实际元素。每个自定义元素的类型都不同。这使得目标元素类型的阻挡退格无法维持。
有没有办法知道在聚合物元素中,按下键的实际元素的类型?或者有更好的方法吗?
只要可能,最好尝试设计您的项目,以避免破坏封装。这就是在跨越阴影边界时调整event.target
的原因。
但是,event.path
属性是一个转义图案填充,它包含已看到事件的所有元素的数组,应该允许您解决此问题。
从事件获取元素:div、INPUT、TEXTAREA。。。
e.target.nodeName
一种方法是深入挖掘自定义元素的shadowdom(及其shadowdom),以获得真正的活动元素。像这样的东西在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
}
}