我正在用Javascript制作一个小的网络应用程序。除了一件可能很简单的事外,我每件事都在工作。我有两个必须保持全局的全局变量,因为稍后我必须在其他函数中使用它们:
var staffmembername;
var data = {
"personaldata": [{
"name": staffmembername,
"location": "Iowa"
},
{
"name": "Cynthia",
"location": "California",
}
]
};'data‘数组使用'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;
} 如果我把变量放在它工作的函数中,那么我的其他函数就不能工作了。那么,是否有一种方法来更新数组中的变量,同时保持两个变量都是全局的?
发布于 2020-05-05 14:28:08
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.name.data
发布于 2020-05-05 14:19:36
之所以会发生这种情况,是因为您的数据对象已经创建,并且它中的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;
}参见此小提琴
https://stackoverflow.com/questions/61615203
复制相似问题