【问题标题】:Undefined property in TypeScriptTypeScript 中的未定义属性
【发布时间】:2012-12-29 18:12:32
【问题描述】:

我对事件有疑问。

我创建了两个接口:

export interface IEEvent extends JQueryEventObject, MSEventObj {
    preventDefault: () => void;
    cancelBubble: bool;
}

export interface IEElement extends HTMLElement {
    click: (event?: IEEvent) => void;
    onmousedown: (event?: IEEvent) => void;
    onmousemove: (event?: IEEvent) => void;
    onmouseup: (event?: IEEvent) => void;
}

我尝试设置 onmousedown\move\up 道具,但出现错误...

public static StopPropagation(element: HTMLElement): void {
    (<IEElement> element).onmousedown = StopPropagationHandler; // error here
    (<IEElement> element).click = StopPropagationHandler; // error here
    (<IEElement> element).onmouseup = StopPropagationHandler; // error here
}

private static StopPropagationHandler(e?: IEEvent): void {
    if (typeof (e) === "undefined") {
        e = <IEEvent> window.event;
    }
    if (typeof (e.preventDefault()) !== "undefined") { // error here
        e.preventDefault(); // error here
    }
    e.cancelBubble = true;
}

如何摆脱这些错误?

【问题讨论】:

  • 你在哪里调用StopPropagation函数?我认为您的问题确实存在,因为您没有传递有效的元素。

标签: javascript events typescript


【解决方案1】:

听起来当异常发生时 StopPropagation 位于调用堆栈的顶部。如果您在调试器中检查它,我怀疑元素是未定义的。如果是这种情况,您可以考虑修改您的代码以处理此问题或抛出异常。例子:

允许取消定义:

public static StopPropagation(element: HTMLElement): void {
    if (element) {
        (<IEElement> element).onmousedown = StopPropagationHandler; // error here
        (<IEElement> element).click = StopPropagationHandler; // error here
        (<IEElement> element).onmouseup = StopPropagationHandler; // error here
    }
}

禁止取消定义:

public static StopPropagation(element: HTMLElement): void {
    if (!element) {
        throw new Error("Null argument exception. An element must be provided.");

    (<IEElement> element).onmousedown = StopPropagationHandler; // error here
    (<IEElement> element).click = StopPropagationHandler; // error here
    (<IEElement> element).onmouseup = StopPropagationHandler; // error here
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 2018-01-31
    • 2021-11-20
    • 2018-03-13
    • 2018-08-30
    • 2020-12-19
    • 1970-01-01
    • 2017-11-21
    相关资源
    最近更新 更多