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了,所以你不需要任何转换。此外,您还使用全局vartimg
,因此它在每个循环迭代中都会发生变化,所以只需使用局部变量即可
$('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使用全局vartimg
,而不是本地,在我的示例中,我使用本地什么不起作用?显示更多代码$(This)
语法不正确,在load
callback中,This
将与k
@charlietfl:nested function only get last相同image@charlietfltimg是全局的,所以它会在每次循环迭代中重新分配,当加载函数启动时,它会捕获最后一个timg值您的整个问题就是没有使用var timg
@charlietfl您是对的,它也使用var timg和bind()。欢迎您!请考虑接受它作为一个答案,如果它帮助你。在你的另一个例子<代码>将记录[对象对象](MyTest](MyTest:<代码)>只有调用<代码>新MyTestTo()/代码>是调用<代码> MyTestTo()/<代码>然后<代码>将记录[对象窗口] < /代码>