2014-03-03 48 views
0

我想要做的是根據所選對象重寫頁面上的內容。我有這樣一些對象,所以:用Javascript更改所選對象

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; 

然而,一切都還是返回undefined在點擊功能(不是最初)。

+2

不應認爲僅僅是currentPlan = A1; ? – Nit

+1

'floorPlan。當前'沒有在任何地方定義,因此它返回'undefined' – Jonathan

回答

1

所有$的第一個(「本」)應該是$(本)

其次你要使用讀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。這是你在找什麼?

+1

編輯答案,我認爲它是你正在尋找。 – patrick

+0

你先生,簡直太神奇了。你能解釋爲什麼將ID存儲在數組中解決了這個問題嗎?我有興趣瞭解如何做到這一點。 – invot

+1

您使用$(this).attr(「id」)從您的LI獲取ID。該ID是一個字符串,而不是變量名稱。因此,如果您執行「currentPlan = current」,則將該字符串放在currentPlan中,而不是具有相同名稱的變量。使用數組使用您獲得的字符串作爲索引。在這種情況下,可以很好地使用字符串 – patrick

1

用作floorPlan.currentPlan = a1;

而不是var currentPlan = floorPlan.a1;

請創建一個plunker,如有任何問題,將予以糾正。

1

我發現兩個錯誤。

當你在函數內寫入var時,該變量只能用該函數訪問。現在,您正在匿名函數中創建一個新變量,該函數「隱藏」具有相同名稱的全局變量。

因此,首先從匿名函數(您通過「click」調用的函數)中的作業中刪除var關鍵字。其次我想你的意思是分配floorPlan[current]

最後行應爲:

currentPlan = floorPlan[current];