var el = $('.container');
var anchors = new Array('jobs', 'portfolio', 'docs', 'interier', 'price');
for (var i = 0; i < anchors.length; i++) {
el.on('click', 'a[href$="#'+anchors[i]+'"]', function (e) {
e.preventDefault();
console.log(anchors[i]);
$.scrollTo('a[name="'+anchors[i]+'"]');
});
};
1
A
回答
3
當您單擊該元素時,i
將遞增到值anchors.length
。
您的點擊處理程序有對i
的引用。
JavaScript中未解決的屬性查找返回undefined
。
使用this
作爲元素的引用會容易得多。否則,找到一種方法來通過值來傳遞值i
,而不是直接引用它。
1
您未定義的原因是因爲i
實際上等於5
。看看這個:這個循環完成後
現在你會認爲i
將在這個時間點是不確定的,因爲它應該是本地的for
循環。不幸的是,這種情況並非如此。一個簡單的方法來測試這一點:
for (var i = 0; i < 5; i++) {
console.log(i);
}
console.log(i) // Logs out 5;
簡而言之,的的i++
for循環獲取真相測試部分執行後,將i < 5
位。因此,當i
等於4
時,循環運行,之後它會增加i++
,該值將i
的值設置爲5,這反過來不能通過真值測試。
所以現在你知道i
等於5
,當你在你的anchors
數組中查找時,anchors[5]
是未定義的。
的原因,這是很重要的,因爲每一次點擊事件觸發,它會爲i
這是5,反過來,你將永遠記錄未定義
爲了解決這個問題,我們可以創建執行緩存值別名的i
價值,像這樣
var el = $('.container');
var anchors = new Array('jobs', 'portfolio', 'docs', 'interier', 'price');
for (var i = 0; i < anchors.length; i++) {
// By passing the value to this self executing function,
// it creates a new instance of the variable
(function (index) {
el.on('click', 'a[href$="#'+anchors[index]+'"]', function (e) {
e.preventDefault();
console.log(anchors[index]);
$.scrollTo('a[name="'+anchors[index]+'"]');
});
})(i);
};
0
變量i
拿到了最後一個循環的價值。如果您要訪問的錨,你可以使用這個:
console.log($(this).attr('href').substr(1));
相關問題
- 1. 爲什麼console.log(true && undefined)返回undefined而if(true && undefined)返回false?
- 2. 爲什麼console.log函數返回undefined?
- 3. 爲什麼這段代碼返回undefined?
- 4. 爲什麼這段代碼返回undefined?
- 5. CONSOLE.LOG返回undefined
- 6. Console.log返回'undefined'
- 7. 爲什麼此代碼返回'複雜'?
- 8. 爲什麼JSON.stringify返回undefined
- 9. 爲什麼innerHTML返回'undefined'?
- 10. 爲什麼fs.readdir返回`undefined`?
- 11. 爲什麼我返回undefined?
- 12. 爲什麼string.length返回undefined?
- 13. 爲什麼val()返回undefined?
- 14. 爲什麼這返回undefined?
- 15. FileReader返回「undefined」。爲什麼?
- 16. 爲什麼setState返回undefined?
- 17. 爲什麼req.params返回'undefined'?
- 18. 爲什麼event [1]返回undefined,但console.log(event)似乎返回一個數組?
- 19. 爲什麼我的javascript代碼返回TypeError undefined?
- 20. 爲什麼這段代碼總是返回undefined?
- 21. 爲什麼在此代碼中append不返回任何值?
- 22. 爲什麼ATOI在此代碼中返回0?
- 23. 爲什麼innerHTML在angularjs中返回undefined
- 24. 爲什麼此代碼返回沒有ViewName的視圖結果?
- 25. 爲什麼此Ruby代碼不會返回預期的答案?
- 26. 爲什麼此代碼返回「不支持指定的方法」。
- 27. AngularJS - 簡單$範圍的console.log()返回undefined
- 28. 爲什麼此代碼將文本設置爲undefined?
- 29. 爲什麼我的ASP.NET AutoCompleteExtender返回undefined?
- 30. 爲什麼我的函數返回undefined?
有點兒offtopic:初始化像變種錨=陣列[「一」,「B」,「C」]應該是[使用Javascript封閉更快 – DVM 2013-03-21 10:05:53
可能重複內部循環 - 簡單的實際例子](http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – 2013-03-21 10:12:29
錯誤的範圍,我沒有在那裏定義。 – 2013-03-27 23:41:10