繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM