'这'范围在TypeScript中

在我的网页上,我删除了像这样的表中的行上的图标:

我使用的打字稿,我已经连接了onClick监听器执行被称为功能OnRemoveClick ,像这样$('.remove').click(this.OnRemoveClick);

OnRemoveClick 2个字段(在行上单击删除图标),然后执行2个函数,如下所示:

private OnRemoveClick(): void {
    $(this).parents('tr').find('.input-qty').val('0');
    $(this).parents('tr').find('.sub-total').html('0');
    this.GetInputFieldsToJson();
    this.CalculateTotal();
}

我遇到的问题是,当我得到GetInputFieldsToJson时,它会GetInputFieldsToJson

TypeError:this.GetInputFieldsToJson不是HTMLAnchorElement.Index.OnRemoveClick上的函数

我意识到这是因为thisOnRemoveClick的上下文中被附加到HTMLAnchorElement ,这意味着我无法从那里访问我的函数。

我所尝试过的

我已经尝试用这样的lambda表达式设置onClick监听器:

$('.remove').click(() => this.OnRemoveClick);

但这意味着该行上的两个jQuery表达式为零字段不再有效


正如你可能已经理解的那样,这里的问题是,当事件处理程序被调用默认上下文作为触发该事件的dom元素时。 所以你无法使用该引用调用对象的方法。

这个问题有多种解决方案,一个简单的解决方案是将自定义上下文传递给使用下面给出的Function.bind()的回调函数,并在回调中使用Event.currentTarget访问目标元素

private OnRemoveClick(e): void {
    $(e.currentTarget).parents('tr').find('.input-qty').val('0');
    $(e.currentTarget).parents('tr').find('.sub-total').html('0');
    this.GetInputFieldsToJson();
    this.CalculateTotal();
}

然后

$('.remove').click(this.OnRemoveClick.bind(this));

$('.remove').click(() => this.OnRemoveClick); 应该是$('.remove').click(() => this.OnRemoveClick()); 即调用该函数。

更多关于this :https://www.youtube.com/watch?v=tvocUcbCupA

链接地址: http://www.djcxy.com/p/86875.html

上一篇: 'This' scope in TypeScript

下一篇: Audio Player play in background and should be work with hardware mute switch