2013-02-21 10 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']; 
}