如果为空,如何POST空<select .. multiple> HTML元素?

Vin*_*ent 17 html jquery html-select multi-select

我在HTML表单中有以下多选框,用户可以在其中选择一个或多个选项.

<select id="eng_0" name="eng_0[]" multiple size="3">
  <option value="Privilégier">Privilégier</option>
  <option value="Accepté">Accepté</option>
  <option value="Temporaire">Temporaire</option>
</select>
Run Code Online (Sandbox Code Playgroud)

当用户选择无选项时,表单将POST发送到PHP后端,但它不会为$ _POST ['eng_0']创建空数组值,就好像该字段甚至不在表单上一样.

这有点像未提交的复选框,未提交问题.

即使没有选择的选项,有没有办法让它对选择对象进行POST?如果有帮助,它可以在jQuery中.

Edw*_*ale 22

如果您的表单是动态生成的,则可以包含一个隐藏的表单元素,该元素具有包含虚拟值的相同名称.然后,忽略虚拟值,如果您获得该变量的值,['dummy_value']那么您可以将其视为代码中的"未选择".


Mat*_*ges 12

有没有理由你不能处理没有设置数组的情况,好像没有内容一样发送?

if (!isset($_POST['eng_0']))
    $_POST['eng_0'] = array();
Run Code Online (Sandbox Code Playgroud)

编辑:

只要表单中存在多个选择,就添加一个隐藏字段:

<input type="hidden" name="eng_0_exists" value="1"/>
Run Code Online (Sandbox Code Playgroud)

然后检查:

if (!isset($_POST['eng_0']) && isset($_POST['eng_0_exists']))
    $_POST['eng_0'] = array();
Run Code Online (Sandbox Code Playgroud)


Fla*_*ame 7

如果在多重选择元素之前添加了隐藏输入,则如果没有选择多个选择项,它将发送隐藏输入值。但是,一旦选择一个选项,就会立即使用该选择的值。

通过这种方式,我能够区分Laravel / php中的2种不同情况:

  • 将all设置myitems为空(需要隐藏的输入,因此PHP收到的空字符串myitems
  • 无需触摸即可更新模型的其他属性myitems(因此不包括myitems表单中的任何输入。PHP将不会收到myitems密钥)

样例代码:

<input type="hidden" name="myitems" value="" />
<select name="myitems[]" multiple>
  <option value="1">Foo</option>
  <option value="2">Bar</option>
</select>
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,这应该是IMO的选择答案,因为它在服务器端的工作量较小,您会得到一个空值或一个实际值。正是我想要的。谢谢! (2认同)