1.我想将id [i]推入全局数组。在我推后,它将是每个数组中的id.length数字项,但它将是错误并且说y不是函数。如何解决它?
2.底部的sendrequest将向服务器发送xmlhttprequest,但我不明白为什么它会先运行然后函数(parResponse)将在tmpReadRequest.sendReadRequest()之后触发;已经失望了。
非常感谢
var tes0=new Array();
var tes1=new Array();
var tes2=new Array();
var tes4=new Array();
var tes5=new Array();
function ReadValuePath(id, Variable,id_2) {
var tmpReadCB = function(parResponse)
{
for (var tmpIndex = 0; tmpIndex < parResponse.length; tmpIndex++)
{
var tmpItemValue = parResponse[tmpIndex];//console.log(tmpItemValue);
var tmpValue = (tmpItemValue.mItemValue) ? tmpItemValue.mItemValue : tmpItemValue.mItemResultId;
if(document.getElementById(id[tmpIndex]) != null && document.getElementById(id_2[tmpIndex]).value != 0)
{
document.getElementById(id[tmpIndex]).value = parseFloat(tmpValue).toFixed(2);
}
}
return true;
}
var tmpReadRequest = new OPCReadRequest("DE", tmpReadCB);
for(var z=0;z<5;z++ ){
for(var i = 0; i < id.length; i++)
var y="tes"+z;
y.push(id[i]);
tmpReadRequest.addItem("ab", Variable[i]);
}
}
tmpReadRequest.sendReadRequest();
}
答案 0 :(得分:0)
答案 1 :(得分:0)
要通过您尝试的字符串文字访问全局范围,可以使用当前全局范围的窗口对象。
因此,在您的情况下,它将是window[y].push(id[i])
;
另一个选择是稍微改变你的结构,因为我个人不喜欢直接访问窗口。
所以你可以定义像
这样的数组var arrays = {
tes0: [],
tes2: [],
tes3: [],
tes4: [],
tes5: [],
}
并访问它们:
arrays[y].push(id[i])
根据评论编辑
所以你想在循环中访问全局变量。你在中途。你正在做的是构建一个包含属性名称的字符串y
,然后使用方括号中的字符串来访问该属性。
因此使用window
选项:
for(var z=0;z<5;z++ ){
var y="tes"+z;
for(var i = 0; i < id.length; i++)
window[y].push(id[i]);
}
}
或使用第二个对象选项
/*
Because arrays is an object we can use Object.keys
This will return an array of the keys in our object which we can loop over to access each one
*/
Object.keys(arrays).forEach(function(key) {
for(var i = 0; i < id.length; i++)
arrays[key].push(id[i]);
}
});
希望有助于解释