[英]Javascript global array with jquery .push returns empty array in alternate function
我在这样的函数外部声明了一个变量:
var vitalsValuesChecked = [];
然后在函数内部:
vitalsValuesChecked.push('foobar');
在以后的功能中,我需要遍历数组以查找推送的项目,并且始终无法获得预期的结果。 因此,在同一功能内,我添加了console.log(vitalsValuesChecked);
返回[]
。
下面的EDIT代码示例; 编辑2下面的固定代码
var vitalsValuesChecked = [];
$(document).delegate("#hv-byresult-btn", "click", function () {
var vitalsTypeList = ['bp', 'ht', 'wt', 'pulse', 'resp', 'temp'];
vitalsValuesChecked = [];
for (var i = 0;i < vitalsTypeList.length;i++) {
if (document.getElementById(vitalsTypeList[i]).checked == true) {
vitalsValuesChecked.push(vitalsTypeList[i]);
console.log(vitalsTypeList[i] + " is checked. Adding to global array");
}
}
$('#vitals-measures-content').empty();
navigate("#vitals-measures");
for (var i = 0;i < vitalsValuesChecked.length;i++) {
console.log("vitalsValuesChecked at index " + i + " is " + vitalsValuesChecked[i]);
}
readRec('clinicalObservation', null, sortVitalsByResult);
});
function foobar() {
console.log(vitalsValuesChecked); //return []
for (var i=0;i < vitalsValuesChecked.length;i++) {
var valueSelected = vitalsValuesChecked[i];
console.log("Value of vitalsValuesChecked at index " + i + " is " + vitalsValuesChecked[i]);
}
}
您已经定义了vitalsValuesChecked
两次,这是一个问题。 一种是全局的,另一种是委托()回调的局部性。 局部定义会覆盖全局定义,因此当您认为要在全局变量中设置值时,就不会这样做-您只是在更改寿命有限的局部变量,因此以后在全局变量中无法使用数据。
您应该删除
var vitalsValuesChecked = [];
在委托处理程序中,因此所有修改都发生在单个全局变量上。
var vitalsValuesChecked = [];
函数内部将创建一个局部变量。 如果您要推送到全局变量,我认为您不需要这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.