所以我有一个Angular 2和Typescript项目,我想在特定的点击下清除页面上的所有焦点。
现在,我只是使用document.activeElement
获取当前活动的元素,然后对其调用.blur()
。然而,这在系统上是不正确的,当然TypeScript对此大发雷霆(这是理所当然的)。
有没有什么方法可以完成同样的事情,但要确保我引用的是HTMLElement
而不是Element
,这样我就可以保证输入的内容是正确的?
基本上,当A)单击子导航并且所单击的菜单项已经打开时,我调用一个函数来关闭所有子菜单,以及B)当文档在不是菜单项的任何地方被单击时。
下面是调用的函数:
closeMenus = function(){
for (var i=0, j=this.openElements.length; i<j; i++){
this.openElements[i] = false;
};
document.activeElement.blur();
};
这将产生以下错误:
Property 'blur' does not exist on type 'Element'
这是绝对正确的,它存在于HTMLElement
上。但是,如果我添加这一行:
console.log(document.activeElement instanceof HTMLElement);
这将返回true。所以我对TypeScript到底想要什么感到非常困惑。
发布于 2016-11-02 04:41:38
将Renderer
注入到组件/指令中。
获取任何elementRef
(例如,您的按钮或链接)。
constructor(private elRef: ElementRef, private renderer: Renderer){
}
然后在你的处理函数中:
this.renderer.invokeElementMethod(
this.elRef.nativeElement.ownerDocument.activeElement, 'blur');
https://stackoverflow.com/questions/40367713
复制相似问题