非常简单的javascript循环来创建事件监听器,返回undefined?

时间:2013-08-31 15:46:28

标签: javascript loops javascript-events

我有一个城市列表,当我点击链接时,我想要运行一些特定的JavaScript。 JS在这里:http://jsfiddle.net/uWYRW/5/

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])
    });
}

但是,我收到错误“undefined'不是一个对象”。请问有人可以解释问题所在吗?

2 个答案:

答案 0 :(得分: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数组中缺少逗号。

答案 1 :(得分:2)

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

注意你忘了在数组中分开的逗号:)