好的,让我告诉你我想在这里做什么, 有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行
感谢您的时间
答案 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);
});