2

<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()吗?或者我对表格的使用是真正的问题?我可以使用divs 代替表格,但那将是我最后的选择。此外,在这些多个表单中,第一个表具有必须填写的字段,因此连同“按您输入验证”的方法,我正在遍历这些必填字段以检查它们是否没有留空,所以这就是数组对象中仅包含每个表单的第一个表的原因。

4

3 回答 3

4

我有同样的问题。我有一种有效的形式和一种无效的形式。做 Prestaul 所说的有助于确认仍然有问题。

问题是我有“id”属性,但没有“name”属性。serializeArray 需要所有输入字段的“名称”属性。

于 2018-05-25T14:39:26.330 回答
3

这是对 serializeArray 的完全有效的使用,它也应该与具有相同名称的多个元素一起使用。我刚刚做了一个快速测试(http://jsfiddle.net/Q5s5V/),一切都按预期运行......我认为你的代码还有其他问题。

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

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

我的猜测是有一个标记错误(未封闭的标签或其他)阻止这些元素被选中。

于 2012-04-11T15:01:53.610 回答
2

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

serializeArray() 仅适用于您指定的表单标记内的字段,因此使用 $("#form-main").serializeArray 将仅包括 field1 和 field2。

Field3 和 field4 不包括在内,因为它们不在#form-main 中,它们在#form-second 中。

于 2018-01-17T00:27:21.590 回答