使用PHP设置HTML下拉列表的selectedindex属性

时间:2012-11-19 20:38:57

标签: php

从数据库中我撤回了用户信息,基于此我可以使用case语句确定正确的索引值:

<?php
    $genderIndex = 0;
    switch ($displayProperties['gender']) 
    {
        case "":
            $genderIndex = 0;
            break;
        case "Male":
            $genderIndex = 1;
            break;
        case "Female":
            $genderIndex = 2;
            break;
        case "Other":
            $genderIndex = 3;
            break;
    }
 ?>

在表单上我有一个HTML下拉列表(选择):

<select name="gender" selectedIndex="<?php echo $genderIndex; ?>">
    <option value="0"> </option>
    <option value="Male">Male</option>
    <option value="Female">Female</option>
    <option value="Other">Other</option>
</select><br/>

问题是它永远不会起作用,并始终在index=0加载页面,我确保验证$genderIndex是否确实具有预期值(确实如此)。

我做错了什么?

3 个答案:

答案 0 :(得分:2)

selectedindex属性未以这种方式使用,为了正确使用selectedindex属性,您可以查看http://www.w3schools.com/jsref/prop_select_selectedindex.asp

相反,你所追求的是将“selected”属性应用于适当的选项。下面的代码运行一些简写if / else检查,并根据您在给定函数中创建的$ genderIndex,在适当的情况下应用“selected”属性。

<select name="gender">
    <option value="0" <?php echo ($genderIndex==0)?('selected'):(''); ?>"> </option>
    <option value="Male" <?php echo ($genderIndex==1)?('selected'):(''); ?>>Male</option>
    <option value="Female" <?php echo ($genderIndex==2)?('selected'):(''); ?>>Female</option>
    <option value="Other" <?php echo ($genderIndex==3)?('selected'):(''); ?>>Other</option>
</select><br/>

答案 1 :(得分:1)

这不起作用的原因是因为 selectedIndex 不是HTML <select/>元素的有效属性。 (见http://www.w3.org/TR/html4/interact/forms.html#h-17.6

要预先选择<select/>元素中的选项(除了第一个选项,这是一个空值),您需要让HTML输出看起来像这样:

<select name="gender">
<option value="0"> </option>
<option value="Male">Male</option>
<option value="Female" selected="true">Female</option>
<option value="Other">Other</option>
</select>

请注意,在第二个<option/>标记上添加了 selected =“true”。像下面这样的东西可以完成工作,但不是很优雅。

<select name="gender">
<?php
if(0 == $genderIndex)
    echo '<option value="0" selected="true"> </option>';
else
    echo '<option value="0"> </option>';

if(1 == $genderIndex)
    echo '<option value="Male" selected="true">Male</option>';
else
    echo '<option value="Male">Male</option>';

if(2 == $genderIndex)
    echo '<option value="Female" selected="true">Female</option>';
else
    echo '<option value="Female">Female</option>';

if(3 == $genderIndex)
    echo '<option value="Other" selected="true">Other</option>';
else
    echo '<option value="Other">Other</option>';
?>
</select>

一个好的Web框架在这里很有帮助。我知道在Java中,Struts框架协助将<select/>标记回显到输出,并选择了相应的<option/>

答案 2 :(得分:0)

这不是您在HTML中指定所选<option>的方式。您需要在selected上拥有<option>属性,如下所示:

<select name="gender">
    <option value="0"> </option>
    <option value="Male" selected>Male</option>
    <option value="Female">Female</option>
    <option value="Other">Other</option>
</select><br/>