Typescript将被jquery覆盖
Typescript this being overriden by jquery hover
当您使用像$(".element").hover(functionHoverIn,functionHoverOut)
这样的jquery悬停绑定时,jquery似乎将悬停的元素传递为this
。像这样:
$('.element').hover(function(e) {
$(this).attr("data-hovered", "true");
//do whatever else
}, function(e) {
//etc
}
}
它很有用,因此在这些匿名函数中,我们可以通过this
或$(this)
访问元素。然而,它似乎与打字稿相冲突。或者是我不明白:
class FancyHover {
HoverElement:JQuery;
constructor(HoverElement:JQuery) {
this.HoverElement = HoverElement;
this.HoverElement.hover(this.HandleHover, this.HandleHover);
}
HandleHover(event:JQueryEventObject):void {
$(event.currentTarget).toggleClass("hovered");
this.OtherFunction(); //Throws error
//Uncaught TypeError: Object #<HTMLDivElement> has no method 'OtherFunction'
}
OtherFunction():void {
//do anything
}
}
理想情况下,我希望传递一个函数(如this.HandleHover
)到.hover(functionIn,functionOut)
调用,而不是匿名函数。但是,当我这样做时,我失去了引用FancyHover的当前实例的能力。也许我可以通过某种方式将当前实例传递给函数HandleHover?
如果你想使用从回调中提供的this
以及类实例的this
,你需要手动完成,例如:
constructor() {
// ...
var self = this;
this.HoverElement.hover(function(event) { self.HandleHover(event, this); });
}
HandleHover(event: JQueryEventObject, jqueryThis: JQuery) {
$(jqueryThis).attr(/*etc*/);
this.OtherFunction();
}
相关文章:
- 覆盖Jquery's函数
- 如何覆盖jQuery所选元素的“click”事件
- 如何覆盖jQuery-ui-sortable的拖动事件
- 覆盖 jquery .load() 函数 - 处理回调
- 覆盖 jQuery 的 .load 函数
- jquery.mobile 覆盖 Jquery UI 主题:
- 如何在屏幕大小更改时覆盖 jquery 滑块切换
- 如何用html5数据属性覆盖jquery插件选项
- 如何覆盖jQuery promise回调
- 如何正确覆盖jquery ui自动完成
- 内联onclick正在覆盖JQuery click()
- 当尝试使用touchOverflowEnabled覆盖jQuery Mobile默认设置时,页面加载了两次
- 移动设备上没有滚动体的全屏覆盖(jquery mobile)
- 在哪里定义悬停类/行为来覆盖jquery的主题CSS
- 如何覆盖Jquery自动完成的用户输入
- 覆盖jQuery ajax +点击进入完成功能
- 覆盖jQuery插件的设置
- 类并覆盖JQuery事件处理程序
- 如何覆盖jquery _blank
- 覆盖jQuery方法$.POST