我有以下代码,基本上是对象中对象的对象。
alertQ = {
0: {
French: {
start: "1am",
duration: "1hr",
status: "queued"
}
},
1: {
Italian: {
start: "2am",
duration: "2hr",
status: "queued"
}
},
2: {
// ...etc...
}
};
function sendTrades(){
var trades = $J("#queue_listbox input:checked");
$J.each(trades, function(key, val){ //iterate thru any selected option
var id = val.value; //checkbox value contains object "id"
$J.each(alertQ[id], function(key, val){
Dbug(key);
alertQ[id][key].status = "active";
//val.status = "active"; //this was also tried with same result
});
});
drawTrades(); //utility function. read only. creates the <input> checkbox elements for display, and is fired before this function to initialize the list
}
我可以正确导航到最里面的对象并从那里读取变量。
整个alertQ
对象是用jQuery .each()循环构造的,基本上与sendTrades()
试图修改它的方式相同。
它构建完美&amp;可从控制台访问。
单击按钮会触发sendTrades()
当我从大于1的列表中选择一个时出现问题,我们假设我选择了法语:
Dbug(key);
正确触发,仅命名法语。 Dbug只是将数据传递给console.log()
所有status
值都更改为"active"
&lt;&lt;不应该发生
我尝试选择所有选项,控制台日志记录正确显示所有名称,并且所有status
都应更改为"active"
。
但是,如果只改变上面提到的那些,它为什么会改变它们呢?
下面的HTML示例
<input value="0" type="checkbox">French
<input value="1" type="checkbox">Italian
<input value="2" type="checkbox">...etc...
如果需要,可以将第3个嵌套对象合并到第2个嵌套对象中。
答案 0 :(得分:1)
我相信它并不像你将所有设置都设置为活动但在测试中,你并没有再次重置alertQ对象。因此,首次选择全部和所有状态都设置为&#34;活动&#34;,在第二次测试中,您只需选中一个框,并将其设置为活动状态,但之前的状态已设置为活动状态。
以下是示例:http://jsbin.com/vonumiqi/1/
//You need to reset the non active to queued or other status you want.
var tradesUnChecked = $("#check1 :not('input:checked')");
$.each(tradesUnChecked, function(key, val){ //iterate thru any selected option
var id = val.value; //checkbox value contains object "id"
console.log(alertQ[id]);
$.each(alertQ[id], function(key, val){
console.log(key);
alertQ[id][key].status = "queued";
//val.status = "active"; //this was also tried with same result
});
});