Javascript 如何在嵌套函数中获取$(this)

Javascript 如何在嵌套函数中获取$(this),javascript,jquery,loading,Javascript,Jquery,Loading,我想在完全加载后显示图像为了实现这一点,我试着编写一些代码,从图像中获取数据src,并将其添加到新的图像对象中,加载该对象后,它应该用对象src替换该图像src,但在嵌套函数$中有一个问题(此)不起作用,只有最后一张图片是代码 $('li img').each(function(){ timg = $(this); var k = new Image(); k.src = $(timg).data('src'); $(k).load(function(){ console.log (k.

我想在完全加载后显示图像为了实现这一点,我试着编写一些代码,从图像中获取
数据src
,并将其添加到新的图像对象中,加载该对象后,它应该用
对象src
替换该
图像src
,但在嵌套函数
$中有一个问题(此)
不起作用,只有最后一张图片是代码

$('li img').each(function(){
timg = $(this);
var k = new Image();
k.src = $(timg).data('src');
$(k).load(function(){
    console.log (k.src);
    $(timg).attr('src', k.src);
    //timg [$(This)] is not working;
});
}); 
用于明确告诉neastead函数您希望成为其
变量的对象:

$('li img').each(function(){
    var k = new Image();
    k.src = $(this).data('src');
    $(k).load(function(){
        console.log (k.src);
        $(this).attr('src', k.src);
        console.log(this); // Shall work now
    }.bind(this));
}); 
详情如下:

// First case
function MyTest() {
    setTimeout(function() {
       console.log(this); // will log [object Window]
    });
}
// Second case
function MyTest() {
    setTimeout(function() {
       console.log(this); // will log "anything"
    }.bind("anything"));
}
// Another case
function MyTest() {
    setTimeout(function() {
       console.log(this); // will log [object Object] (MyTest)
    }.bind(this));
}

看看这个你的
timg
已经是jqueryobj了,所以你不需要任何转换。此外,您还使用全局var
timg
,因此它在每个循环迭代中都会发生变化,所以只需使用局部变量即可

$('li img').each(function(){
    var timg = $(this);
    var k = new Image();
    k.src = timg.data('src');
    $(k).load(function(){
        console.log (k.src);
        timg.attr('src', k.src);
    });
}); 

如果使用了
op
$(timg)
,则也可以。。。这是不可能的solution@Girish,我想,op使用全局var
timg
,而不是本地,在我的示例中,我使用本地什么不起作用?显示更多代码
$(This)
语法不正确,在
load
callback
中,This
将与
k
@charlietfl:nested function only get last相同image@charlietfltimg是全局的,所以它会在每次循环迭代中重新分配,当加载函数启动时,它会捕获最后一个timg值您的整个问题就是没有使用
var timg
@charlietfl您是对的,它也使用var timg和bind()。欢迎您!请考虑接受它作为一个答案,如果它帮助你。在你的另一个例子<代码>将记录[对象对象](MyTest](MyTest:<代码)>只有调用<代码>新MyTestTo()/代码>是调用<代码> MyTestTo()/<代码>然后<代码>将记录[对象窗口] < /代码>