在Javascript中更改所选对象

时间:2014-03-03 22:57:31

标签: javascript jquery oop

我要做的是根据我选择的对象重写页面上的内容。我有一些像这样的对象:

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;

但是,在点击功能中一切都仍然未定义(尽管最初没有)。

3 个答案:

答案 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];