JQueryEventObject&目标

时间:2013-07-16 20:07:48

标签: typescript

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

我错过了什么吗?

3 个答案:

答案 0 :(得分:5)

我使用它并且它工作正常......

    private funct(event: JQueryEventObject) {
        var state = $(event.target).prop('checked');
    }

答案 1 :(得分: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,就像Andree的回答一样)。对于jqEvent.target.attributes['tag']的示例,正​​确的方法是通知编译器它实际上是Node({1}}的祖父对等接口),它具有HTMLElement属性:

attributes

如果您明确访问更具体的界面的属性,则上述演员也可以是(<Node> jqEvent.target).attributes['tag'] 。使用最通用的接口被认为是面向对象的最佳实践。

答案 2 :(得分:-1)

我认为这在宣言中实际上是一个错误。它应该是JQuery类型。但是可以通过Typescript构造

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

或作为JQuery构造函数的参数

$(event.target)[0].attributes['id'];