带有jquery .push的Javascript全局数组在alternate函数中返回空数组

时间:2012-08-10 21:12:18

标签: javascript jquery-mobile

我在一个函数之外声明一个变量:

var vitalsValuesChecked = [];

然后在我做的函数内部:

vitalsValuesChecked.push('foobar');

在稍后的函数中,我需要遍历数组以推送项目,并且经常无法获得我期望的结果。所以在同一个函数中,我添加了console.log(vitalsValuesChecked);,返回[]

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

2 个答案:

答案 0 :(得分:2)

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

你应该删除

var vitalsValuesChecked = [];

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

答案 1 :(得分:1)

函数内的var vitalsValuesChecked = [];将创建一个局部变量。如果你想要推动全局变量,我认为你不想要这个。