3

在事件处理程序中,我需要确定被点击的 DOM 元素。我希望使用 jqEvent.target.attributes['tag'] 其中 jqEvent 是 JQueryEventObject 类型。但是“目标”在 lib.d.ts 中定义为 EventTarget 类型,其中不包含我可以使用的任何内容......

我错过了什么吗?

4

3 回答 3

5

我用这个,它工作得很好......

    private funct(event: JQueryEventObject) {
        var state = $(event.target).prop('checked');
    }
于 2013-07-16T23:15:21.307 回答
1

这是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如果您要显式访问更具体接口的属性,则上述转换也可能是。尽可能使用最通用的接口被认为是面向对象的最佳实践。

于 2014-10-24T02:07:10.160 回答
-1

我认为这实际上是声明中的错误。它应该是 JQuery 类型。但是可以通过 Typescript 构造进行转换

<JQuery>(event.target)[0].attributes['id'];

或作为 JQuery 构造函数的参数

$(event.target)[0].attributes['id'];
于 2014-10-14T05:50:57.447 回答