Typescript Uncaught TypeError:从jquery事件处理程序调用函数时不是函数

时间:2017-02-17 00:14:20

标签: javascript typescript typescript2.0

打字稿的新手,试图弄清楚为什么这不起作用:

我有以下类定义:

class SliderRange {

    updateSliderText(lowId: JQuery, highId: JQuery) {
        //do some updates
    }

    constructor(public uiId: string, lowDisplay: JQuery, highDisplay: JQuery) {
        //register the events that tie ui to the set methods here.
        this.primaryUi().on("input", function () {
            this.updateSliderText(lowDisplay, highDisplay);
        });

        this.secondaryUi().on("input", function () {
            this.updateSliderText(lowDisplay, highDisplay);
        }); 
    }

    private primaryUi() : JQuery {
        return $(`.original#${this.uiId}`);
    }
    private secondaryUi(): JQuery {
        return $(`.ghost#${this.uiId}`);
    }
}

正在正确触发事件,但是当它们被触发时,浏览器会抱怨this.updateSliderText不是函数。在浏览器中查看,这不会被Typescript取代,而是引用JQuery对象(primaryUi或secondaryUi)。然而,IntelliSense正确导航到正确的updateSliderText函数,这使我相信它应该编译成正确引用该函数的javascript。

如何在jquery事件处理程序中引用属于该类的函数?

谢谢。

1 个答案:

答案 0 :(得分:3)

您呼叫this的{​​{1}}上下文错误。

你需要一个箭头功能(它们是出于这个原因而发明的)或者通过绑定它来做旧样式:

this.updateSliderText

cool和TypeScript方法是箭头方法。