【问题标题】:HTML Form checkboxes not submitting as I expectHTML表单复选框未按我预期提交
【发布时间】:2012-03-17 09:37:39
【问题描述】:

[解决方案:通过将“[]”连接到末尾来将我的名字更改为数组。另外,将我的 ID 更改为唯一值以符合 HTML 规范]

我正在创建一个表单,它有一个复选框矩阵(html 表),每行一个用户,并且用户对列的权限。每个单元格都有一个复选框。一行中的每个复选框都将“名称”设置为用户的电子邮件地址(唯一)。复选框的值是特定权限的 ID。当我单击提交按钮并检查从 HTTP POST 返回的参数时,只有最右边的复选框设置为选中多个框的行。

例如,有三个复选框,第一个和第二个选中,第三个未选中。我只取回第二个复选框的 name=id。

我正在 Rails 中构建表单,尽管我认为这并不相关。另外,出现这种行为的浏览器是 Chrome、Iceweasel 和 Epiphany...所以我认为这是我的表单。

我的表格摘录:

<tr>
                <td>UserOne</td>
                <td>one@oreo.com</td>
                <td>
                        <input checked="checked" id="one_oreo.com" name="one@oreo.com" type="checkbox" value="1" />
                </td>
                <td>
                        <input id="one_oreo.com" name="one@oreo.com" type="checkbox" value="2" />
                </td>
                <td>
                        <input id="one_oreo.com" name="one@oreo.com" type="checkbox" value="3" />
                </td>
                <td>
                        <input checked="checked" id="one_oreo.com" name="one@oreo.com" type="checkbox" value="4" />
                </td>
                <td>
                        <input id="one_oreo.com" name="one@oreo.com" type="checkbox" value="5" />
                </td>
                <td>
                        <input id="one_oreo.com" name="one@oreo.com" type="checkbox" value="6" />
                </td>
            </tr>

【问题讨论】:

  • 顺便说一句 - Oreo.com 不是真实的 - 它是一个代号 :)
  • 多个具有相同 id 的项目无论如何都是无效的 html。
  • 您应该使用唯一的 id - 一个 id 值不应该重复。您是否在表单上使用 JS 验证器?它可能会导致/导致您的问题。

标签: html ruby-on-rails forms checkbox


【解决方案1】:

您已将所有它们的 name="" 设置为相同的值,因此当您勾选多个复选框时,它将替换原来存在的任何值。

给每个复选框一个不同的名称,例如name="one@oreo.com_check_1" 或使用 name="one@oreo.com[]" 将它们转换为数组,然后将传递给它的所有值存储在数组中,然后您可以在提交表单后处理!

【讨论】:

  • [] 是解决方案!我会在 4 分钟内接受这个答案。谢谢:)
  • 我对此非常担心。在 html 中,您应该为要组合在一起的所有复选框使用相同的名称。并且应该发送默认检查的那些。因此,这违反了 html 标准,要求您使用 [] 数组语法。
  • @Donato 仅仅因为一个规范告诉您应该以一种方式做某事并不意味着您使用的服务器端语言会很好地发挥作用。我还没有真正详细阅读有关复选框的 HTML 规范以了解您是否正确,但经过快速搜索,这似乎是解决此问题的最常见方法。我们不能总是让每种语言完美地协同工作,完全遵循彼此的规范,所以有时你必须做出例外来解决问题。
【解决方案2】:

复选框的名称必须是唯一的。我建议在名称中放置用户 ID 和权限 ID。你也应该相应地改变 Ida。 id 不影响表单提交,但在 HTML 中有多个具有相同 id 的元素是不正确的。

【讨论】:

    【解决方案3】:

    您不能将每行的名称参数命名为相同的值。复选框必须是唯一的或至少是一个数组。单选按钮是您可以使用相同名称值的地方。

    【讨论】:

    • 你可以用相同的名字命名复选框,我已经做了很多。 id 属性是唯一需要唯一的属性。
    猜你喜欢
    • 1970-01-01
    • 2021-09-26
    • 2023-02-17
    • 1970-01-01
    • 2019-09-24
    • 2013-01-21
    • 2021-10-29
    • 2021-10-16
    • 2014-02-19
    相关资源
    最近更新 更多