【发布时间】:2011-11-05 04:09:24
【问题描述】:
注意:
这有点难用谷歌搜索,因为“GET”提出了很多“如何使用 javascript '获取'表单的值”等。
问题:
TL;DR 版本优先
您能否在表单的 GET 方法中使用多选并仍检索每个单独的值?
扩展解释
我正在构建的可搜索目录的要求包括对表单使用 GET 方法,以便用户可以在 url 中看到他们的结果,并将搜索结果的直接链接发送给另一个客户等。
其中一个可搜索字段是多选框(带有MULTIPLE 属性的选择框)。我的后端是用 PHP 编写的,我通常通过将名称设置为数组变量 (name="multiselect[]") 来处理多选,而 post 变量包含一个选定选项的数组 ($_POST["multiselect"] == array())。
这种情况下的问题是多选值是这样传递给get字符串的:
action?multiselect=1&multiselect=2
因此,无论最后一个值是什么,都会替换 get 字符串中变量的第一次初始化值。 (在上面的例子中,多选等于“2”)。
尝试将名称设为数组只会使数组值以相同的方式替换,就像这样
action?multiselect[]=1&multiselect[]=2
将导致$_GET["multiselect"] == 2
我最初建议使用复选框,因为它允许我们以不同的方式命名元素并检查每个元素的真/假,但是这个特定的多选大约有 30 个值,他们希望它是在可滚动区域中。
【问题讨论】:
-
为什么不添加隐藏的表单元素并将多选值复制到相应的复选框。用jquery很容易做到。您显然有理由使用“获取”,但请记住 URL 的长度是有限的。你不能通过 URL 本身发送 8K 的数据。
-
您是否尝试过使用 foreach 循环遍历 post 变量或使用 $_GET["multiselect"] 的大小?
-
这很好。在任何情况下,限制他们可用的选项子集可能是一个好主意。最初我试图保持这种形式完全可降解(并不是我真的希望迎合那些关闭 JS 的人,但如果有人的 JS 失败或发生任何事情,我们总是会被覆盖)。浏览器通过 GET 发送表单数据的方式让我束手无策吗?
-
好吧,barryhunter 证明我遇到了另一个问题。但是现在我想到了 Mech,它仍然为表单上的每个输入发送一个空白值。在 JS 之外有没有办法防止这种情况发生以限制 url 大小? (这似乎现在需要成为一个新问题)