Jquery 如何发布空邮件<;选择。。多重>;HTML元素是否为空?
我有以下HTML表单中的多选框,用户可以在其中选择一个或多个选项Jquery 如何发布空邮件<;选择。。多重>;HTML元素是否为空?,jquery,html,multi-select,html-select,Jquery,Html,Multi Select,Html 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">Tempo
<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>
私人
接受
临时工
当用户选择no选项时,表单将发布到PHP后端,但它不会为$_POST['eng_0']创建空数组值,就好像该字段甚至不在表单上一样
这有点像未选中的复选框未提交的问题
即使没有选定的选项,是否有任何方法使其张贴到“选择对象”上?如果有帮助的话,可以在jQuery中使用。有什么原因不能将数组未设置的情况视为发送时没有内容
if (!isset($_POST['eng_0']))
$_POST['eng_0'] = array();
编辑:
每当表单中出现多选时,添加隐藏字段:
<input type="hidden" name="eng_0_exists" value="1"/>
if (!isset($_POST['related'])) $_POST['related']="";
如果表单是动态生成的,则可以包含一个具有相同名称的隐藏表单元素,该元素包含一个伪值。然后,忽略伪值,如果该变量的值是
['dummy\u value']
,则可以将其视为代码中“未选择任何内容”的意思。您可以添加一个-请选择-条目并预选它
<select id="eng_0" name="eng_0[]" multiple size="3">
<option value="nothing" selected="selected">- please select -</option>
<option value="Privilégier">Privilégier</option>
<option value="Accepté">Accepté</option>
<option value="Temporaire">Temporaire</option>
</select>
-请选择-
私人
接受
临时工
如果即使当用户选择它时,$\u帖子中也没有关于选择的内容,那该怎么办
<form action="cart.php" method="POST">
<input type="hidden" id="acao" name="acao" value="add" />
<input type="hidden" id="id" name="id" value="<?=$cnt->cnt_codigo?>" />
<?php
$resOpc = mysql_query("SELECT * FROM loja_opcionais ORDER BY descricao")or die(mysql_error());
if(mysql_num_rows($resOpc) > 0){
?>
<select id="opcional" nome="opcional">
<?php
while($opc = mysql_fetch_object($resOpc)){
?>
<option value="<?=$opc->descricao?>"><?=$opc->descricao?></option>
<?php
}
?>
</select>
<?php
}
?>
<button class="botao" type="submit">Adicionar ao Carrinho</button>
</form>
如果没有$\u POST,那么发布空字符串(nothing)绝对是最简单的解决方案
下面是我对带有
只需在处理表单存储的php部分中添加以下行:
<input type="hidden" name="eng_0_exists" value="1"/>
if (!isset($_POST['related'])) $_POST['related']="";
添加如下内容
$(“#字段”).change(函数(){
if($(“#字段”).val()| |[])==“”)($(“表单”).append(“”);
});
将
包含到您的表单中,其中的名称与您的multiple=“multiple”
选择的名称相同
不幸的是,浏览器不会像对待非多次选择或正常输入那样,为multiple=“multiple”
选择发送空表单参数
使用公认答案中建议的虚拟值不是一个非常干净的解决方案
(这个问题与jQuery无关)如果在multiple-select元素之前添加一个隐藏的输入,那么如果没有选择多个select项,它将发送隐藏的输入值。但只要选择一个选项,就会使用该选定值
通过这种方式,我能够在Laravel/php中区分两种不同的场景,分别是:
- 将所有
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>
福
酒吧
我不知道数组是否没有提交,因为:1)用户没有选择任何选项2)控件甚至不在表单上(表单是使用非常复杂的算法动态生成的)。对我来说,这是两种不同的情况,我想知道发生了什么。是的,HTML不发送“不成功”的元素(包括没有选择的选择框、没有选择的单选按钮和未选中的复选框)。问题实际上不清楚,因为您可以使用isset控制值($\u POST['eng\u 0'])
。即使没有选择任何选项,也要发布选择的内容是什么意思?作为补充说明,即使选择的内容不是“多个”的,如果选择了“没有值”,也可能会有此行为,并且不会提交。例如,如果运行此javascript文档。getElementById('select\u id')).value='a non option';
(通常情况下,普通用户输入不会有问题,因为他们无法从下拉列表中选择任何内容)。我只是想提一下:)不,这是个非常糟糕的主意!因为用户可以用CTRL键取消选择选项!如果要取消选择所有内容,该怎么办?然后您是否也使用一些javascript来重新选择_empty选项?我还猜测,使用诸如Select2或selected之类的美化器将显示空选项somehowGreat answer,这应该是所选的答案,因为在服务器端工作较少,您要么得到一个空值,要么得到一个实际值。这正是我想要的。谢谢绝对是最好的答案!