如何清空<select .. =“”multiple =“”> HTML元素如果为空?</select>

时间:2009-07-15 15:55:27

标签: 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">Temporaire</option>
</select>

当用户没有选择任何选项时,表单将被POST到PHP后端,但它不会为$ _POST ['eng_0']创建空数组值,就好像该字段在表单上不均匀一样。

这有点像未提交问题的未选中复选框。

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

8 个答案:

答案 0 :(得分:20)

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

答案 1 :(得分:12)

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

if (!isset($_POST['eng_0']))
    $_POST['eng_0'] = array();

编辑:

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

<input type="hidden" name="eng_0_exists" value="1"/>

然后检查:

if (!isset($_POST['eng_0']) && isset($_POST['eng_0_exists']))
    $_POST['eng_0'] = array();

答案 2 :(得分:5)

如果在多重选择元素之前添加隐藏输入,如果没有选择多个选择项,它将发送隐藏输入值。只要选择一个选项,就会使用所选的值。

通过这种方式,我能够在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>

答案 3 :(得分:3)

您可以添加 - 请选择 - 条目并预选。

<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>

答案 4 :(得分:1)

即使用户选择它,但是没有关于select的内容到达$ _POST?

            <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>

当我做print_r($ _ POST);在另一方面,输出只是: 数组([acao] =&gt;添加[id] =&gt; 3)并且没有选择标记的符号,即使我更改了另一边的值;

答案 5 :(得分:1)

添加类似

的内容

&#13;
&#13;
        sqlprm[0] = new SqlParameter(DBProcedures.sqlparam_Name, Stu_Name);
        sqlprm[1] = new SqlParameter(DBProcedures.sqlpram_Email, Stu_Email);
        sqlprm[2] = new SqlParameter(DBProcedures.sqlpram_Mobile_Num, Stu_Mobile);


        dr = objDAL.ExecuteReader(DBProcedures.Usp_StuEmail, ref sqlprm, false);
        while (dr.Read())
        {
            InstEmails list1 = new InstEmails()
            {

                Emaillist = dr["email"].ToString(),

            };
            data.Add(list1);
        };

        foreach (var emailId in data)
        {

            string MessageBody = "studentname" + Stu_Name + " is Intersted" + "studentmail is" + Stu_Email;
            string MailSubject = "this is from Traininghubs";
            obj.SendEmailToInstitute(emailId.ToString(), MessageBody, MailSubject);
        }

    }






        catch(Exception e)
      {



        }



    return data;
    }
    #endregion
&#13;
&#13;
&#13;

答案 6 :(得分:0)

如果没有$ _POST,发布空字符串(无)绝对是最简单的解决方案。

这是我对<select name="related[]" multiple>

的表单的解决方案

只需在处理表单存储的php部分添加以下行:

if (!isset($_POST['related'])) $_POST['related']="";

答案 7 :(得分:0)

在您的表单中加入<input type="hidden" name="yourfield" value="" />,其中的名称与您multiple="multiple"选择的名称相同。

不幸的是,浏览器不会为multiple="multiple"次选择发送空表单参数,就像它们对非多次选择或普通输入一样。

使用接受答案中提出的虚拟值不是一个非常干净的解决方案。

(这个问题与jQuery无关)