0

从数据库中我拉回用户信息,并基于此我可以使用 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确实具有预期值(确实如此)。

我究竟做错了什么?

4

3 回答 3

2

selectedindex 属性没有以这种方式使用,关于 selectedindex 属性的正确使用可以查看http://www.w3schools.com/jsref/prop_select_selectedindex.asp

相反,您所追求的是将“选定”属性应用于适当的选项。下面的代码运行一些速记 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/>
于 2012-11-19T20:44:36.550 回答
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>

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

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

一个好的网络框架在这里会很有帮助。我知道在 Java 中,Struts 框架有助于将<select/>标记回显到输出并<option/>选择适当的选项。

于 2012-11-19T20:56:39.510 回答
0

这不是您<option>在 HTML 中指定选定项的方式。您需要对自身具有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/>
于 2012-11-19T20:41:33.537 回答