Jquery 如何发布空邮件<;选择。。多重>;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

我有以下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>

私人
接受
临时工
当用户选择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,这应该是所选的答案,因为在服务器端工作较少,您要么得到一个空值,要么得到一个实际值。这正是我想要的。谢谢绝对是最好的答案!