Jquery $.serializeArray()不包括表单中的所有字段

Jquery $.serializeArray()不包括表单中的所有字段,jquery,forms,serializearray,Jquery,Forms,Serializearray,我在一个页面上有多个,都有唯一的ID,表单主体如下所示 <form id="form-main"> <table> <tr> <td><input type="text" name="field1"/></td> . . . . . . . . . . . . . . </tr>

我在一个页面上有多个
,都有唯一的ID,表单主体如下所示

<form id="form-main">
    <table>
        <tr>
           <td><input type="text" name="field1"/></td>
                . . . . . . .
                . . . . . . .
        </tr>
    </table>
    <table>
        <tr>
           <td><input type="text" name="field2"/></td>
                . . . . . . .
                . . . . . . .
        </tr>
    </table>     
</form>

<form id="form-second">
    <table>
        <tr>
           <td><input type="text" name="field3"/></td>
                . . . . . . .
                . . . . . . .
        </tr>
    </table>
    <table>
        <tr>
           <td><input type="text" name="field4"/></td>
                . . . . . . .
                . . . . . . .
        </tr>
    </table>
</form>

. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
我知道不建议使用表来对齐表单字段,而CSS可以做到这一点,但实际问题是,当我使用
$(“#form main”).serializeArray
,我应该在数组对象中获取此表单的所有字段,但这里我只获取表单中第一个表的字段,其余的输入被忽略


这是
serializeArray()
的有效行为吗?还是我使用表格才是真正的问题?我可以使用
div
s代替表,但这是我最后的选择。另外,在这些多个表单中,第一个表包含必须填写的字段,因此,除了“键入时验证”方法外,我还对这些必填字段进行迭代,以检查它们是否为空,这就是为什么数组对象中只包含每个表单的第一个表的原因。

这是serializeArray的一个非常有效的用法,并且它应该可以处理具有相同名称的多个元素。我只是做了一个快速测试(),一切都按预期进行。。。我认为你的代码中还有其他错误

您可以尝试的一件事是选择输入本身而不是表单,请参见1)您是否拥有所有期望的输入,以及2)集合是否正确序列化

var $elements = $('#form-main :input');
console.log($elements.length);
console.log($elements.serializeArray());

我的猜测是,有一个标记错误(未关闭的标记或任何东西)阻止了这些元素被选择。

我知道这是一个老问题,但我很惊讶在这里没有看到正确的答案。问题是页面上有两个表单,而不是一个

serializeArray()将仅对指定的表单标记内的字段起作用,因此使用$(“#form main”)。serializeArray将仅包括field1和field2


字段3和字段4不包括在内,因为它们不在#form main中,而是在#form second中。

我遇到了同样的问题。我有一张有效的表格和一张无效的表格。按照普雷斯托尔的话做有助于确认仍然存在一些问题

问题是我有“id”属性,但没有“name”属性。序列化数组要求所有输入字段都具有“name”属性


Rob

我知道不建议使用表格来对齐表单字段
。。。从什么时候开始?当然css是有效的,但有时,简单性是关键。不要让那些“讨厌桌子的人”攻击你。格式良好的表没有问题。第二个表中的所有字段是否使用与第一个表中相同的
名称
属性?顺便说一句,检查两件事:1)表单是否完全包装了表,2)所有输入、选择和文本框是否都有
名称
属性?@SpYk3HH表用于表格数据,我们是“餐桌仇恨者”是有原因的@TimBJames lol,这并不总是正确的,在“图形设计”的世界中,有时使用html表格比尝试和使用css更容易,代码也少得多,更不用说,它倾向于制作重要的东西,比如表单,向后兼容较旧的浏览器。我不知道我遗漏了什么,但当我重写JS代码时,问题得到了解决,该代码是
$。merge()
d将各个表单的所有数组对象转换为单个对象,并再次将其转换为JSON,以便通过
$.ajax()
发送。谢谢……我在这里也面临着同样的问题,但在我的情况下是这样的::(实际上,在最后两个元素中,我使用JavaScript设置了值(一些功能)我没有从用户那里获取值。这是问题吗???@ShyamDixit,您的问题也是html的结构。您不能在关闭表单之前关闭第一个div。将开始表单标记移到外部div之外,您就可以了。