2015-03-25 77 views
3

我要显示的图像后,加载完全达到这个东西拿到$(本),我尝试写一些代码,它从图像获取data-src,并在新的Image对象加入它,加载后对象,它应该取代image srcobject src但有一个问题,在嵌套函数$(this)不工作,只及彼最后一个图像是代码...如何嵌套函数

$('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; 
}); 
}); 
+0

什么是不工作?显示更多的代码。 '$(这)'是不正确的语法和'load'回调'this'将同内'k' – charlietfl 2015-03-25 12:40:25

+0

@charlietfl:_nested功能只获得了最后image_ – Grundy 2015-03-25 12:41:11

+1

@charlietfl TIMG是全球性的,所以它重新分配在每个循环迭代,当负载功能火 - 它赶上最后TIMG价值 – Grundy 2015-03-25 12:46:25

回答

2

timg已经jQuery的OBJ,所以你不需要任何转换。你也使用全局var timg所以它在每个循环迭代中都改变了,所以只需使用local。

$('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); 
    }); 
}); 
+0

如果'op'使用'$ (TIMG)'然后也很好...这不会解决方案 – Girish 2015-03-25 12:35:07

+0

@Girish没有记错,_op_使用全局变量'timg',而不是本地的,我的样品i中使用当地 – Grundy 2015-03-25 12:37:42

+0

OK,不管唯一的变量定义不'$(TIMG) ' – Girish 2015-03-25 12:43:52

1

使用Function.bind()到明确的告诉你neastead功能你谁想成为它的this变量:

$('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)); 
} 

看这个Example

+0

Thanks .bind(this)is working .. – 2015-03-25 12:45:51

+0

不客气!如果有帮助,请考虑接受答案。 – nanndoj 2015-03-25 12:51:39

+0

在另一种情况下'将记录[目标对象](MyTest的)'只有当调用'新MyTest的()'是'调用MyTest的()''然后将记录[对象窗口]' – Grundy 2015-03-25 12:52:30