【问题标题】:My java script array doesn't have a length我的 javascript 数组没有长度
【发布时间】:2015-09-24 00:21:10
【问题描述】:

我有以下代码:

//Populate inputData with the values of the input text boxes, in order
var inputData = {};
var x = document.getElementById("newInventoryForm");

//Added this following line in the edit
$('#additionalContent').append("My x.length property " + x.length + "<br/>");

for (var i = 0; i < x.length - 1; i++) {// -1 so we don't get the submit button
    var addData = {
        id : x[i].id,
        value : x[i].value
    };
    inputData[i] = addData;
    $('#additionalContent').append(inputData[i].id + " : " + inputData[i].value + "<br/>");
}

我正在尝试将表单数据从以前制作的表单传递到另一个 javascript 函数。在我这样做之前,我试图让它在同一个 .js 页面中工作,但是当我尝试通过 for 循环输出我的 inputData 时,它显示为空白。我确定这是因为inputData.lengthundefined。我的印象是,将其声明为 inputData = {}; 使其成为一个数组,因此具有默认长度值。我怎样才能将其更改为正确的长度?

编辑

一些评论者说var x = document.getElementById("newInventoryForm"); 应该返回 null 或一个节点,它们都没有长度属性。在上面的代码中添加这一行,就产生了这个输出。

我的 x.length 属性 18 序列号:456 someDatafield : someInput

【问题讨论】:

    标签: javascript razor model-view-controller


    【解决方案1】:

    您已将其声明为对象。

    也许var inputData = [];会给你更好的结果。

    【讨论】:

    • SLaks(下)提出了一个很好的观点。也许你想要 var x = $('#newInventoryForm'); .serializeArray() 也可能值得研究。
    • @JordanDavidson 奇怪的是他说它没有返回数组,因为我拥有的代码可以工作。只是 inputData.length 不起作用(现在原因很明显,谢谢)。它产生像“id,value”这样的表单数据,这是不应该工作的东西,出于某种原因吗?我应该将其更改为 var x= $('#newInventoryForm');以确保它一直有效?
    • 使用 jQuery 表示法肯定会给你一些迭代的东西,但它可能不是你想要的。看看你用var x = $('#newInventoryForm').serializeArray();得到的数组
    【解决方案2】:

    {} 是一个对象,而不是一个数组。
    你想要[]

    另外,getElementById() 不返回数组;你的整个代码毫无意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      • 2017-06-06
      • 2017-11-10
      • 1970-01-01
      相关资源
      最近更新 更多