如何获得聚合物组件内元素的实际事件keydown目标?

时间:2014-09-13 20:00:57

标签: javascript polymer dart-polymer

防止退格导航回来的代码通常需要类似this approach的内容,其中窗口keydown事件被阻止退格,除了一小组已知的元素类型,如Input,TextArea等。< / p>

这对聚合物自定义元素中的元素不起作用,因为keydown事件目标类型是自定义元素的类型,而不是获得keydown的实际元素。每个自定义元素的类型都不同。这使得目标元素类型阻塞退格无法维持。

有没有办法知道聚合物元素中获得按键的实际元素的类型?或者有更好的方法吗?

3 个答案:

答案 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