我正在用Javascript开发一个小型Webapp。除了1个可能简单的东西之外,我让所有东西都能正常工作。我有2个必须保持全局状态的全局变量,因为稍后必须在其他函数中使用它们:
var staffmembername;
var data = {
"personaldata": [{
"name": staffmembername,
"location": "Iowa"
},
{
"name": "Cynthia",
"location": "California",
}
]
};
“数据”数组使用“ stafmembername”变量。 “ stafmembername”变量将其值更改为选定的选项值。如您所见,感谢带有警报的测试。数组中的变量似乎仍然保持未定义状态。
其余代码:
document.getElementById("confirmchoice").onclick = function() {
var e = document.getElementById("staffmember");
pickedname = e.options[e.selectedIndex].text;
document.getElementById("nr1").value = pickedname;
staffmembername = document.getElementById("nr1").value;
alert(staffmembername);
document.getElementById("h3tl").innerHTML = "name:" + data.personaldata[0].name + "<br>"
+ "location: " + data.personaldata[0].location;
}
如果我将变量放入函数中,则可以,但是其他函数将不起作用。那么有没有办法在保持两个变量都全局的同时更新数组中的变量呢?
答案 0 :(得分:0)
之所以会这样,是因为您的数据对象已经创建,并且其中的name属性没有再次更新。您可以通过调用方法来创建数据对象,这将采用最新值。
function getData() {
return {
"personaldata": [{
"name": staffmembername,
"location": "Iowa"
},
{
"name": "Cynthia",
"location": "California",
}
]
};
}
另一种选择是将staffmembername
设置为对象并更新其值,这样您就可以访问更新的对象。
var staffmembername = {value: ''};
var data = {
"personaldata": [{
"name": staffmembername,
"location": "Iowa"
},
{
"name": "Cynthia",
"location": "California",
}
]
};
document.getElementById("confirmchoice").onclick = function() {
var e = document.getElementById("staffmember");
pickedname = e.options[e.selectedIndex].text;
document.getElementById("nr1").value = pickedname;
staffmembername.value = document.getElementById("nr1").value;
alert(staffmembername);
document.getElementById("h3tl").innerHTML = "name:" + data.personaldata[0].name.value + "<br>" + "location: " + data.personaldata[0].location;
}
查看此Fiddle
答案 1 :(得分:0)
staffmembername
时会评估 data
,因为它是按值传递的。因此,它在data
中的值永远不变。您可以将data
包装在函数中。每次调用函数时,staffmembername
都会被求值,而不仅是在初始化时:
var staffmembername;
var data = function () {
return {
"personaldata": [{
"name": staffmembername,
"location": "Iowa"
},
{
"name": "Cynthia",
"location": "California",
}
]
};
}
};
然后像这样使用它:
data().personaldata[0].location
您还可以将对象用于staffmembername
。
var staffmembernameObject = {};
var data = [{
personaldata: [{
name: staffmembernameObject,
...
staffmembernameObject.data = document.getElementById("nr1").value;
并像这样使用它: data.personaldata [0] .name.data