我被这个jQuery数组卡住了,在Stack Overflow上碰碰运气。不确定我在哪里犯了错。
此功能的目的是创建一个数组,用于保存具有子列表的选定项目,并在达到列表最大选择时发出警报。工作人员可以选择一道菜,例如Kebab。只能将SALAD、SAUCE配置为最大输入
阵列应该是
var id = 0;
var Option = $(this).attr('ConfigName') // SALAD
if (typeof (FOODS[id][Option]) == "undefined") {
FOODS[id][Option]={};
}
FOODS[id][Option ][0]="ONION"
FOODS[id][Option ][1]="LETTUCE"
FOODS[id][Option ][2]="CARROT"
// Option changed to SAUCE
FOODS[id][Option][0]="MAYO"
FOODS[id][Option][1]="KETCHUP"
if(FOODS[id][Option].length<MaxSelect){
alert("Max Option Selected")
}
当添加了另一道菜时,这将增加id并使用上述方法再次存储。
当我用jQuery在上面编码时,它会显示错误FOODS[id][Option]未定义。
如果FOODS
是一个数组,初始化为[]
,那么这就是行if (typeof (FOODS[id][Option]) == "undefined") {
的评估方式:
FOODS => ok, value is []
id => ok, value is 0
Option => ok, value is "SALAD"
FOODS[id] = [][0] => ok, value is undefined
FOODS[id][Option] = undefined["SALAD"] => TypeError, cannot access property of undefined
因为您试图访问值为undefined
的属性,JavaScript将抛出一个错误。
您需要初始化FOODS[id]
,类似于以下内容:
if (!(id in FOODS)) {
FOODS[id] = {};
}
if (typeof (FOODS[id][Option]) == "undefined") {
FOODS[id][Option]={}; // See below; this is also wrong
}
这不是唯一的问题。您还将对象与数组合并。尽管您可以为对象指定数字键,但您将无法在该对象上检查length
;这只是Arrays的一个特性。因此,将FOODS[id][Option]={};
更改为FOODS[id][Option]=[];
。