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



我在单个页面上有多个<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 秒内。

相关内容

  • 没有找到相关文章

最新更新