Javascript阅读多维形式

时间:2014-02-10 18:34:15

标签: javascript multidimensional-array html-form-post

这促使我今天下午“啰嗦”!

供应商(Zaxaa)使用多维形式:

<form method="post" name="zaxaa" action="xxxx">
<input type="text" name="products[0][prod_name]" value="ABC">
<input type="text" name="products[0][prod_type]" id="pt" value="FRONTEND">
</form>

**这是我对如何设置多维数组的理解,它似乎将变量传递给服务器。

但是,根据测试表单上设置的其他输入,[prod_type](和其他)可能需要更改为“OTO”这显然是一个javascript函数,(但不是变体,在代码行上以“$”开头......无论那种类型是什么!)

我试过了

  • document.zaxaa.products[0].prod_type.value
  • document.getElementById('products[0][prod_type]').value
  • document.getElementsByName('products[0][prod_type]').value

但在每一个案例中,我都得到“产品未定义”。 (我已经简化了表格,因为有十个产品[0]字段)

任何想法?

+++++

试图关闭问题,但8小时不能这样做

天哪,我不相信这个网站。它必须是 - 自我发布问题以来最多15分钟,已经有三个答案。谢谢你们的快速回复。我已经解决了......主要是我的一个明显的错误。 getElementById运行正常...除了在我的测试脚本中我使用了getElementById [xxx]而不是getElementById(xxx)!!即“[”而不是“(”如果你的语法正确,它会有帮助!!

但是我会注意到其他方法,例如在[“xxx”中包含两个数组参数]再次,非常感谢你的快速响应。

3 个答案:

答案 0 :(得分:2)

getElementById无法正常工作,因为id中只有一个元素是第二个输入,id="pt"

any modern browser上,您可以使用querySelector使用CSS选择器获取输入列表:

var nameInput = document.querySelector('input[name="products[0][prod_name]"]');
var typeInput = document.querySelector('input[name="products[0][prod_type]"]');

然后使用他们的value属性。例如,要将名称设置为"OTO"

document.querySelector('input[name="products[0][prod_name]"]').value = "OTO";

如果您需要相关querySelectorAll的列表,请使用input,例如:

var nameInputs = document.querySelectorAll('input[name="products[0][prod_name]"]');

然后根据需要循环浏览它们(列表为length,您可以通过[n] n0length - 1来访问元素。


RE

  

*这是我对如何设置多维数组的理解......

HTML所做的就是使用input属性定义name个元素。该name属性按原样发送到服务器,如果您有多个具有该名称的字段,则根据需要重复该名称属性。将它们变成数组的任何东西都是服务器端的,与客户端上的JavaScript无关。 ([0]不常见,我习惯只看到[],例如name="products[][prod_name]"。)

答案 1 :(得分:0)

您可以使用以下语法访问它:

document.zaxaa['products[0][prod_name]'].value

答案 2 :(得分:0)

document.zaxaa.products[0].prod_type.value

名称是单个字符串,而不是使用嵌套结构来访问输入。它需要

document.zaxaa["products[0][prod_type]"].value
// or better:
document.forms.zaxaa.elements["products[0][prod_type]"].value

复杂的名称仅用于将数据解析为服务器端的(多维)数组,但所有数据都将被“展平”。

document.getElementById('products[0][prod_type]').value

您输入的idpt,因此这也应该有效:

document.getElementById("pt").value
document.getElementsByName('products[0][prod_type]').value

getElementsByName会返回多个元素的集合 - 它本身没有.value属性。相反,访问集合中的第一个元素(或完全迭代它):

document.getElementsByName('products[0][prod_type]')[0].value