在选择表单字段中选择不会突出显示所选选项

时间:2013-04-12 17:55:25

标签: php html

我有以下PHP函数:

function pick ($fieldname, $optionvalues, $defvalue=0, $size=0)
{

    $checked = $defvalue;
    echo "<select name=\"$fieldname\" size=\"$size\">\n";

    foreach ($optionvalues as $value)
    echo " <option value = \"$value\"  ".
    (($value == $checked) ? ' selected ' : '') . "> $value </option>\n";
    echo "</select>";
}

当我用它来称呼它时:

$vals = array('a','b','c','d','e');
pick ('pick2', $vals, 'c');

它不会突出显示c,即使在页面源中,它也会标记为已选中。 我的页面来源是:

<select name="pick2" size="0">
<option value = "a"  > a </option>
<option value = "b"  > b </option>
<option value = "c"   selected > c </option>
<option value = "d"  > d </option>
<option value = "e"  > e </option>
</select>

如果我将通话功能更改为:

pick('p',$vals,'c') 

它可以正常工作。 有人可以解释我的功能有什么问题吗?

2 个答案:

答案 0 :(得分:2)

更改此行

 (($value == $checked) ? ' selected ' : '') . "> $value </option>\n";

 (($value == $checked) ? ' selected="selected" ' : '') . "> $value </option>\n"; 

答案 1 :(得分:1)

HTML在HTML 5标准下有效。这是你爽快的方式。如果单击刷新按钮或按F5,浏览器将记住您的选择。您必须再次“转到”该网址(例如,点击地址栏并按Enter键)

<?php
function pick ($fieldname, $optionvalues, $defvalue='', $size=0){
    $checked = $defvalue;
    echo '<select name="'.$fieldname.'">';
    foreach($optionvalues as $value){
        echo '<option value="'.$value.'"'.($checked==$value?' selected':'').'>'.$value.'</option>';
    }
    echo '</select>';
}

$vals = array('a','b','c','d','e');
pick ('pick2', $vals, 'c');

为什么浏览器会记住您的选择? 这是大多数浏览器内置的选项(通常在选项中保存表单历史记录)。禁用此功能应确保始终将表单数据重置为“原始状态”。这样做的问题是它将表单数据留在最终用户手中,这是不好的。

通过使用selected属性,可以确保始终使用last remembered而不是autocomplete

<select autocomplete="off">