2015-03-25 80 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