JQuery myArray [myVarriable]是未定义的,即使我已经定义了它

时间:2011-07-03 14:11:06

标签: jquery arrays object undefined

好的,让我告诉你我想在这里做什么, 有4个对象,类似于这个:

var links = {name: "Links", id: "links", index: 0};

我把它们放在一个数组中:

var pages = [links,about,projects,contact];

我创建了这个函数:

function active_page(selected){
  var active = 0;
  $("[id="+pages[selected].id+"]").show();
}

然后我在

中运行active_page(0)
$(function(){
  active_page(active);
});

我得到了这个错误:

pages[selected] is undefined

整个.js文件在这里: http://pastebin.com/2rBWiVJF

我得到的错误在第26行

感谢您的时间

2 个答案:

答案 0 :(得分:2)

这是一个常见问题。实际问题在于您的clicked()功能。

for循环不会创建新范围,因此您始终引用相同的i变量,该变量将在循环后保留最新值。

function clicked() {
    for (var i = 0; i < pages.length; i++) {
        $("[id=" + pages[i].id + "_btn]").mousedown(function (e) {
            if (e.which == 1) {
                // the "i" passed is always going to be the same as "pages.length"
                active_page(i);
                active = i;
            }
        });
    }
}

在JavaScript中定义变量的唯一方法是在函数中。因此,您应该将i传递给新的函数调用,以便对其进行范围化。

function clicked() {
    // used to scope the value of "i", and return a function
    //     that references it.
    function createHandler(this_i) {
        return function (e) {
            if (e.which == 1) {
                active_page(this_i);
                active = this_i;
            }
        }
    }
    for (var i = 0; i < pages.length; i++) {
        $("[id=" + pages[i].id + "_btn]").mousedown(createHandler(i));
    }
}

答案 1 :(得分:0)

var active = 0;
var pages  = [{name: "Links", id: "links"}, 
          {name: "About", id: "about"}, 
          {name: "Projects", id: "projects"}, 
          {name: "Contact", id: "contact"];

function active_page(selected){
   $('#' + pages[selected].id).show();
}

$(function(){
  active_page(active);
});