【问题标题】:associative array not setting correctly关联数组未正确设置
【发布时间】:2013-10-22 18:50:58
【问题描述】:

我是 javascript 和 jquery 的新手,想知道是否有人可以告诉我为什么这不能正常工作。

我有一个下拉框,用户可以从中选择一个值,然后是“进程”。处理后,下拉列表和文本框的值存储在数组中。我希望用户能够基本上将相同的下拉选择和文本框数据再次存储在数组中,但现在存储在一个新的值对中。

第一家商店是 TestArray[0][0] = "文本框值"

如果再次“处理”,它将是 TestArray[1][0] = "文本框值"

这样我可以稍后解析并计算用户“处理”下拉选择的次数;

var oneClickReport = $("#reportName").val();
    if(oneClickReport == "Sample Report One"){
        var arrayOneCount = reportOneArray.length;
        var totalHouseholds = 0;
            $("#reportChecks span:visible").each(function(){            
                if($(this).find(':checkbox').prop('checked')){
                    var HHName = $(this).text();
                    reportOneArray.push(HHName);
                    arrayTest[arrayOneCount][totalHouseholds] = HHName;
                }
            totalHouseholds += 1;
            });
            for(i = 0; i < arrayOneCount; i+=1){
                alert(arrayTest[0][i]);
            }
    }

但是当第二次尝试“处理”时,我收到了错误;

SCRIPT5007: Unable to set property '0' of undefined or null reference 

在线;

arrayTest[arrayOneCount][totalHouseholds] = HHName;

【问题讨论】:

    标签: javascript jquery arrays asp-classic associative-array


    【解决方案1】:

    你需要初始化你的数组。我不确定你到底想做什么,但你需要一个这样的数组

    var arrayTest = []
    

    你需要像

    一样初始化后续值
    arrayTest[1] = []
    

    然后你就可以访问你的数组了

    arrayTest[1][0] = []
    

    我给你做了个例子

    var oneClickReport = $("#reportName").val();
    var arrayTest = [] # You may need to put this elsewhere
    if(oneClickReport == "Sample Report One"){
        var arrayOneCount = reportOneArray.length;
        var totalHouseholds = 0;
            $("#reportChecks span:visible").each(function(){            
                if($(this).find(':checkbox').prop('checked')){
                    var HHName = $(this).text();
                    reportOneArray.push(HHName);
    
                    if(!arrayTest[arrayOneCount]){ arrayTest[arrayOneCount] = []; }
    
                    arrayTest[arrayOneCount][totalHouseholds] = HHName;
                }
            totalHouseholds += 1;
            });
            for(i = 0; i < arrayOneCount; i+=1){
                alert(arrayTest[0][i]);
            }
    }
    

    【讨论】:

    • 非常感谢您的回答,我想我已经差不多了。我遇到的一件我绝对没有考虑过的事情是,如果用户最初选择了多个要添加的复选框,则 arrayOneCount 值不会为 1,但无论选择了多少。有没有办法让我检查 arrayTest[0] 或 arrayTest[1] 等是否已初始化和填充?我真的只是想要这样的东西,如果用户第一次处理“报告一个”,它将所有选定的复选框存储在 arrayTest[0] 中,然后如果他们再次处理 arrayTest[1] 等。再次感谢
    • 您可以使用数组的长度属性来实现这一点。 if(arrayTest[arrayOneCount].length > 0){ #arrayTest[arrayOneCount]里面有东西 } else{ #arrayTest[arrayOneCount]里面什么都没有 }
    【解决方案2】:

    var arrayOneCount = reportOneArray.length; 的问题,并且您没有更改此值

    【讨论】:

    • 该值将在每次调用该函数时递增。它将重新计算添加到数组中的新值并以这种方式更新
    猜你喜欢
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多