2013-02-21 62 views
0

我正在使用jquery窗體文件,該文件使用數組來填充基於材質選擇的大小下拉列表。這工作正常,但現在我們正在添加一個額外的下拉菜單,我們需要根據該選擇在數組中具有不同的值。Javascript - 使用if語句更改數組值

這是當前工作的代碼部分:什麼,我想,不知道如何

var Material = new Array(); 
Material['UNC'] = new Array('40', '32'); 
Material['UNF'] = new Array('10', '24'); 

這基本上是:

if($("#style").val() == "long") { var Material = new Array(); 
Material['UNC'] = new Array('45', '35'); 
Material['UNF'] = new Array('15', '29');} else { 

var Material = new Array(); 
Material['UNC'] = new Array('40', '32'); 
Material['UNF'] = new Array('10', '24');} 

我的運氣不好,我對Javascript功能不太熟悉。感謝

+0

**請勿**使用非數字鍵的數組。改爲使用對象。瞭解有關對象的更多信息:https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects。 – 2013-02-21 02:35:11

+0

還比使用構造函數更好地使用數組文字。你對'new Array(10)'期待什麼?'? – RobG 2013-02-21 02:36:42

+0

在頁面加載時是否已知所有可能列表的所有值,或者您是否要返回服務器以獲取子下拉列表的值列表? – 2013-02-21 02:36:43

回答

2

一種方式:

var isLong = $('#style').val() === 'long'; 
var material = {}; 
material.UNC = (isLong) ? [45, 35] : [40, 32]; 
material.UNF = (isLong) ? [15, 29] : [10, 24]; 

的另一種方法:

var isLong = $('#style').val() === 'long'; 
var material = {}; 
if (isLong) { 
    material.UNC = [45, 35]; 
    material.UNF = [15, 29]; 
} 
else { 
    material.UNC = [40, 32]; 
    material.UNF = [10, 24]; 
} 

作爲菲利克斯克林指出的,最好是在物料的陣列使用的對象。我也使用了一個小寫變量名的JavaScript約定。代替new Array使用[]而不是new Object,您可以使用{}

0

你只需要移動Material變量的聲明塊外:

var Material = new Array(); 
if($("#style").val() == "long") { 
    Material['UNC'] = new Array('45', '35'); 
    Material['UNF'] = new Array('15', '29'); 
} else { 
    Material['UNC'] = new Array('40', '32'); 
    Material['UNF'] = new Array('10', '24'); 
} 

然而,正如其他人所指出的,你應該使用的對象,而不是爲這些類型的非數組數字索引。您還應該使用對象和數組表示法:

var Material = {}; 
if($("#style").val() == "long") { 
    Material['UNC'] = ['45', '35']; 
    Material['UNF'] = ['15', '29']; 
} else { 
    Material['UNC'] = ['40', '32']; 
    Material['UNF'] = ['10', '24']; 
}