0

我在函数之外声明了一个变量,如下所示:

var vitalsValuesChecked = [];

然后在我做的一个函数内部:

vitalsValuesChecked.push('foobar');

在稍后的函数中,我需要遍历数组以获取推送的项目,并且一直没有得到我期望的结果。所以在同一个函数中,我添加了console.log(vitalsValuesChecked);which returns []

编辑代码示例如下; 编辑 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]);
    }
}
4

2 回答 2

2

您已经定义vitalsValuesChecked了两次,这是一个问题。一个是全局的,一个是本地的 delegate() 回调。局部定义会覆盖全局定义,因此当您认为将值设置为全局变量时,您并没有 - 您只是更改了生命周期有限的局部变量,因此您的数据稍后在全局变量中不可用。

你应该删除

var vitalsValuesChecked = [];

在委托处理程序内部,因此所有修改都发生在单个全局变量上。

于 2012-08-10T21:19:55.187 回答
1

函数内部将var vitalsValuesChecked = [];创建一个局部变量。如果您尝试推送到全局变量,我认为您不需要这个。

于 2012-08-10T21:21:23.593 回答