我有一个小的加载脚本来设置一些看起来像这样的类:
function frameIt() {
console.log("called frameit")
$( 'img' ).on('load', () => {
console.log("running listener")
debugger;
$( this ).addClass( "tasty" );
});
console.log("set listener")
}
我的问题是$(this)
始终设置为window
,即使上下文中的this
是Chrome的调试器显示的加载的img
标记。为什么会发生这种情况的任何想法?这是Chrome调试器屏幕截图:
答案 0 :(得分:6)
这是因为箭头函数不会绑定自己的this
上下文 - 它们会获取封闭范围的this
值。由于jQuery在内部绑定事件处理程序this
,但this
无法绑定到箭头函数,this
引用window
,因为它是{{1}封闭范围的值。改为使用常规功能。
答案 1 :(得分:2)
$( 'img' ).on('load', function () {
console.log("running listener")
debugger;
$( this ).addClass( "tasty" );
});