我要做的是根据我选择的对象重写页面上的内容。我有一些像这样的对象:
function floorPlan(name,rev,sqft,bedrm,bthrm) {
this.name = name;
this.rev = rev;
this.sqft = sqft;
this.bedrm = bedrm;
this.bthrm = bthrm;
}
// 1BR Plans
var a1 = new floorPlan('A1',false,557,1,1);
var a2 = new floorPlan('A2',false,652,1,1);
var a3 = new floorPlan('A3',false,654,1,1);
var a4 = new floorPlan('A4',false,705,1,1);
var a5 = new floorPlan('A5',false,788,1,1);
// The Selected plan
var currentPlan = floorPlan.a1;
我让用户通过菜单中的.click()
功能控制它:
$('.sideNav li').click(function() {
// Define the currentPlan
var current = $(this).attr('id');
var currentPlan = floorPlan.current;
});
问题是currentPlan
不断变回未定义,我不明白为什么。我应该以不同的方式定义currentPlan
吗?我似乎无法找到任何资源来帮助我找到答案。
更新:
根据你的建议我分了几个部分:
// The Selected plan
var currentPlan = a1;
和....
// Define the currentPlan
var current = $(this).attr('id');
currentPlan = current;
但是,在点击功能中一切都仍然未定义(尽管最初没有)。
答案 0 :(得分:1)
用作floorPlan.currentPlan = a1;
而不是var currentPlan = floorPlan.a1;
请创建一个plunker并纠正是否有任何问题。
答案 1 :(得分:1)
首先$('this')应该是$(this)
其次,您尝试使用LI中的读取ID作为变量名称。这不起作用。如果将计划存储在数组中,则可以使用该ID在该数组中进行搜索:
var plans=Array();
plans["a1"]=new floorPlan('A1',false,557,1,1);
plans["a2"]=new floorPlan('A2',false,652,1,1);
然后你的jQuery代码应改为:
$('.sideNav li').click(function() {
// Define the currentPlan
var current = $(this).attr('id');
var currentPlan = plans[current];
alert(currentPlan);
});
我为此创建了JSFiddle。这是你在找什么?
答案 2 :(得分:1)
我发现了两个错误。
在函数内部编写var
时,只能使用该函数访问该变量。现在,您正在匿名函数中创建一个新变量,该变量“隐藏”具有相同名称的全局变量。
因此,首先从匿名函数(您在“click”中调用的那个)中的赋值中删除var
关键字。
其次我认为你的意思是指派floorPlan[current]
。
最后一行应为:
currentPlan = floorPlan[current];