'这'范围在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上的函数
我意识到这是因为this
在OnRemoveClick
的上下文中被附加到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
上一篇: 'This' scope in TypeScript
下一篇: Audio Player play in background and should be work with hardware mute switch