JavaScript <form>输入字段“associative”数组?</form>

时间:2011-04-26 04:56:36

标签: javascript forms dom

我首先要说明我完全清楚JavaScript中没有“真正的”关联数组。话虽这么说,我希望有类似......

<form action="javascript:submitSpecial();" name="myForm" >
    <input name="myInput" type="text" />
</form>

具体来说,我不希望这个表单直接调用.php脚本。我希望它由我的JavaScript函数“submitSpecial()”处理,并使用各自的名称选择表单输入,并对下一个.php脚本进行AJAX调用。

document.forms['myForm']['myInput'].name
document.forms['myForm']['myInput'].value

基本上我想构建或查找包含此信息的数组。我只能使用JavaScript,没有JQuery或类似的东西。 elements []集合非常接近,但我需要知道属于值的列名。

有什么建议吗?

提前致谢, 扎克

3 个答案:

答案 0 :(得分:3)

我不明白你的困难。看起来你理解how to get Javascript form elements。如果没有,请查看链接。这是表单中的how to get elements

如果需要键值对,请创建一个JSON对象。这是technical overviewHere's a cute example

...所以,在你的用例中:

var formStuffy = {
   "formName" : [
       { "formElementName" : document.getElementByName(formElementName).value },
   ]
}

或类似的东西(没有测试那个片段,但在概念上它应该在球场。)

编辑:根据操作说明他想自动获取表单字段的值,您可以使用这样的元素来查询表单的命名元素和值:

for (i=0; i<theform.elements.length; i++){
  alert("element name is " + theform.elements[i].name + " value " + theform.elements[i].value);
}

答案 1 :(得分:2)

我不确定我是否正确理解你的问题,我一般会建议不要使用古老的(1996年代)forms.elements.blah语法,但是如果它适用于你目前的情况,去吧。

如果我正确地解释了您的问题,您有一个包含许多字段的表单,如果它们存储在关系数据库中,则表示通过在该数据库中显示表或视图中的多个行而形成的列。在天真实现的情况下,这将导致在表单中存在许多相同名称的字段的情况。这不一定是坏事,并且实际上需要这样的情况作为允许多个选择的一组复选框。但是,在这些明确定义的案例之外,如果可能的话,应该避免这种情况。

无论如何,抛开更重要的问题,让我们假设一个具有以下结构的表格:

<form name="banana" action="bananaform">
    <input name="skin">
    <input name="skin">
    <input name="skin">
</form>

此标记将在名为“banana”的表单中生成包含三个文本输入的表单,每个输入都名为“skin”。然后,每个输入的值将以

的形式提供

document.forms["banana"]["skin"][0]

document.forms["banana"]["skin"][1]

document.forms["banana"]["skin"][2]

换句话说,同名特定形式的元素成为类似数组的元素集合,可以通过标准数组索引语法进行访问。

值得注意的是,由于这些结构是文档对象模型(DOM)的一部分,因此没有任何特定实现支持将它们视为本机JavaScript数组的正式要求,因此{{{{{并非所有平台都支持{}}和length等方法。

实际上,JQuery等库的主要目的之一是保护开发人员免受此类异常的影响;不幸的是,现在更多地使用图书馆来让开发人员不知道他们工作的真实性质,同时设法创造一种能力的印象。如果你继续使用JavaScript和DOM并且不使用JQuery,你将迅速成为一个更有能力的Web开发人员,而不是那些急于使用快速的JQuery解决方案回答Stack Overflow上的每个JavaScript问题的人中的99%这既不是寻求也不是期望。

我不是唯一一个立即拒绝任何没有JQuery无法工作的Web开发人员角色的人。实际上,我希望任何使用JQuery的人都能阅读并理解源代码。那些没有的人很容易识别;例如,他们认为JQuery有一种与众所周知的技术不同的魔法酱。

然而,有时候,那些知道众所周知的技术但却没有阅读过来源的人会犯这样的错误,认为这是一种魔法酱,正如Eric对我的回答的评论所示:Unexpected Caching of AJAX results in IE8(对不起,埃里克; - ))

答案 2 :(得分:0)

您正在寻找JavaScript ForEach Equivalent

for(var elementName in form.elements)
{
    alert("form."+elementName+": "+elements[elementName]);
}