在事件处理程序中,我需要确定被点击的 DOM 元素。我希望使用 jqEvent.target.attributes['tag'] 其中 jqEvent 是 JQueryEventObject 类型。但是“目标”在 lib.d.ts 中定义为 EventTarget 类型,其中不包含我可以使用的任何内容......
我错过了什么吗?
在事件处理程序中,我需要确定被点击的 DOM 元素。我希望使用 jqEvent.target.attributes['tag'] 其中 jqEvent 是 JQueryEventObject 类型。但是“目标”在 lib.d.ts 中定义为 EventTarget 类型,其中不包含我可以使用的任何内容......
我错过了什么吗?
我用这个,它工作得很好......
private funct(event: JQueryEventObject) {
var state = $(event.target).prop('checked');
}
这是EventTarget
(在 中找到dom.generated.d.ts
,与 TypeScript 一起分发)的定义:
interface EventTarget {
removeEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
dispatchEvent(evt: Event): boolean;
}
可能有其他类实现EventTarget
以附加事件,因此最安全的 API 定义是设置Event.target
为实现EventTarget
附加侦听器的对象。
在 jQuery 上下文中,Event.target
几乎可以肯定是类型HTMLElement
(不是JQuery
安德烈回答中的类型)。对于您的示例jqEvent.target.attributes['tag']
,正确的方法是通知编译器它实际上是一个Node
(的祖父接口HTMLElement
),它确实具有以下attributes
属性:
(<Node> jqEvent.target).attributes['tag']
HTMLElement
如果您要显式访问更具体接口的属性,则上述转换也可能是。尽可能使用最通用的接口被认为是面向对象的最佳实践。
我认为这实际上是声明中的错误。它应该是 JQuery 类型。但是可以通过 Typescript 构造进行转换
<JQuery>(event.target)[0].attributes['id'];
或作为 JQuery 构造函数的参数
$(event.target)[0].attributes['id'];