我正在尝试记录属于一行的对象的位置。所以最后我需要一个综合对象,它在行内有行和“com”的位置。这是我的代码:(g
是一个全局对象)
g = {comPos:""}
$(".Com").draggable({
start: function(event, ui) {
var thisRow = $(this).closest("div[id^='step']");
g.thisRowID = thisRow.attr("id");
g.thisComID = $(this).attr("id");
console.log(g.thisComID); //returns the id value
},
stop: function(event, ui) {
var thisX = event.pageX;
var thisY = event.pageY;
var thisComPos = {
id: g.thisRowID,
x: thisX,
y: thisY
}
g.comPos[g.thisRowID][g.thisComID] = thisComPos; //undefined
}
});
这是抛出的错误:
"TypeError: Cannot set property 'com1' of undefined"
使用括号表示法我的方式返回undefined。我究竟做错了什么?如果您需要更多代码,请告诉我,我已粘贴了我认为相关的部分。
答案 0 :(得分:0)
当你这样做时
g.comPos[g.thisRowID][g.thisComID] = thisComPos;
它实际上是查找g.comPos[g.thisRowID]
,获取结果的对象,然后插入新属性值的快捷方式。换句话说,它相当于
var myTemporaryObject = g.comPos[g.thisRowID];
myTemporaryObject[g.thisComID] = thisComPos;
我猜测如果你这样破坏你的代码,那么中间的“myTemporaryObject”就会为空。
填充该中间对象必须明确地发生;它不仅仅是通过魔法出现在那里。
尝试类似
的内容g.comPos[g.thisRowID] = g.comPos[g.thisRowID] || {} //create an empty intermediate object if necessary
g.comPos[g.thisRowID][g.thisComID] = thisComPos;