2013-08-31 60 views
-2

我有一個城市列表,當我點擊一個鏈接時,我想要運行一些特定的javascript。這裏的jsfiddle:http://jsfiddle.net/uWYRW/5/非常簡單的JavaScript循環來創建事件監聽器,返回undefined?

var cities = [ 
    ["new-york", 45, 90, 15] 
    ["london", 20, 30, 15] 
]; 

for (i = 0, length = cities.length; i < length; i++) { 
    $("#"+cities[i][0]).click(function (e) { 
     e.preventDefault(); 
     console.log(cities[i][0]) 
    }); 
} 

不過,我得到錯誤「未定義」不是一個對象」。請問有人可以解釋問題出在哪裏?

+0

你有一個錯誤,行到單獨的逗號? – Doorknob

+1

將'console.log(cities.length,i)'添加到您的點擊處理程序中,您將看到問題 – Andreas

回答

2

嘗試的IIFE(立即調用的函數表達式):

for (i = 0, length = cities.length; i < length; i++) { 
    (function(i) { 
     $("#"+cities[i][0]).click(function (e) { 
      e.preventDefault(); 
      console.log(cities[i][0]) 
     }); 
    })(i); 
} 

這是因爲一旦循環完成的i值將是cities.length所有click聽衆。

此外,您在2d數組中缺少一個逗號。

2
var cities = [ 
    ["new-york", 45, 90, 15], // <-- that comma was missing 
    ["london", 20, 30, 15] 
]; 

通知您忘記陣列:)

+1

儘管如此,這並不能解決問題。 – iConnor

+0

三個upvotes爲解決問題的答案。幸運的你!僅供參考,如果OP在其實際代碼中缺少註釋,它甚至不會運行,但會引發語法錯誤。由於看起來代碼* does *運行,所以逗號必須在OP的真實代碼中。 –