JavaScript & lt; form>输入字段"associative"数组中

JavaScript <form> input fields "associative" array?

本文关键字:quot associative 数组 字段 lt form JavaScript 输入      更新时间:2023-09-26

我将首先声明,我完全意识到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[]集合非常接近,但是我需要知道属于这些值的列名。

有什么建议吗?

提前感谢,Zak

我不明白你的难处。看起来您已经了解了如何获取Javascript表单元素。如果没有,请点击链接。下面是在表单中获取元素的方法。

如果你想要一个键值对,创建一个JSON对象。下面是技术概述。这是一个可爱的例子。

…因此,在您的用例中:

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

或类似的东西(没有测试这个片段,但从概念上讲,它应该在大致范围内。)

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

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

我不确定我是否正确理解了你的问题,我通常建议不要使用古老的(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等属性和sort等方法可能不支持所有平台。

的确,像JQuery这样的库的主要目的之一就是保护开发人员免受这种异常的影响;不幸的是,这些库现在更经常被用来让开发人员对他们工作的真实本质保持无知,同时设法创造一种能力的印象。如果你继续使用JavaScript和DOM而不使用JQuery,你将很快成为一个更有能力的web开发人员,而不是99%的人急于回答Stack Overflow上的每个JavaScript问题,用一个既不需要也不需要的快速而肮脏的JQuery解决方案。

我并不是唯一一个会立即拒绝任何没有JQuery就无法工作的web开发人员职位候选人的人。实际上,我希望任何使用JQuery的人都已经阅读并理解了源代码。那些没有的人很容易识别;例如,他们认为JQuery有一种不同于众所周知的技术的魔力。

然后,有时候,那些知道众所周知的技术但没有阅读源代码的人会犯同样的错误,认为有魔法酱,正如Eric对我的回答的评论所见:IE8中AJAX的意外缓存结果(对不起,Eric;-))

您正在寻找JavaScript ForEach等价。

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