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)
如果在多重选择元素之前添加了隐藏输入,则如果没有选择多个选择项,它将发送隐藏输入值。但是,一旦选择一个选项,就会立即使用该选择的值。
通过这种方式,我能够区分Laravel / php中的2种不同情况:
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)