这促使我今天下午“啰嗦”!
供应商(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”中包含两个数组参数]再次,非常感谢你的快速响应。
答案 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]
n
为0
到length - 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
您输入的id
为pt
,因此这也应该有效:
document.getElementById("pt").value
document.getElementsByName('products[0][prod_type]').value
getElementsByName
会返回多个元素的集合 - 它本身没有.value
属性。相反,访问集合中的第一个元素(或完全迭代它):
document.getElementsByName('products[0][prod_type]')[0].value