我在单个页面上有多个<form>
,所有都有唯一的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
而不是表格,但这是我的最后选择。此外,在这些多个表单中,第一个表具有必须填写的字段,因此除了"按类型验证"方法外,我正在迭代这些必填字段以检查它们是否留空,因此这是数组对象中仅包含每个表单的第一个表的原因。
我也有同样的问题。我有一个表格有效,一个表格无效。按照普雷斯陶尔所说的去做有助于确认仍有一些不对劲的地方。
问题是我有"id"属性,但没有"名称"属性。serializeArray 需要所有输入字段上的"name"属性。
抢
这是 serializeArray 的一个完全有效的用法,它也应该适用于具有相同名称的多个元素。 我刚刚做了一个快速测试(http://jsfiddle.net/Q5s5V/),一切都按预期运行......我认为您的代码中还有其他问题。
您可以尝试的一件事是选择输入本身而不是表单,然后查看 1) 您是否拥有所需的所有输入以及 2) 该集合是否正确序列化。
var $elements = $('#form-main :input');
console.log($elements.length);
console.log($elements.serializeArray());
我的猜测是存在标记错误(未关闭的标签或其他错误)阻止选择这些元素。
这是一个老问题,但我很惊讶在这里没有看到正确的答案。问题是页面上有两个表单,而不是一个。
serializeArray() 仅适用于您指定的表单标记中的字段,因此使用 $("#form-main").serializeArray 将只包括 field1 和 field2。
字段 3 和字段 4 不包括在内,因为它们不在主 #form 中,而是在 #form 秒内。