【发布时间】:2009-08-17 21:57:50
【问题描述】:
我有一个显示 3 个选项的选择框:option1、option2、option3。当用户点击提交时,在 $_POST 我确实选择了值。有没有一种简单的方法可以重新显示选择框,突出显示所选选项而不在选项中重复?
也就是说,如果选择了option2并点击了提交,页面应该会再次显示option2被选中,option1和option 3在下方。
谢谢。
【问题讨论】:
我有一个显示 3 个选项的选择框:option1、option2、option3。当用户点击提交时,在 $_POST 我确实选择了值。有没有一种简单的方法可以重新显示选择框,突出显示所选选项而不在选项中重复?
也就是说,如果选择了option2并点击了提交,页面应该会再次显示option2被选中,option1和option 3在下方。
谢谢。
【问题讨论】:
<?php
$arrValues = array(...);
$selectedValue = (isset ($_POST['selectName']) ? $_POST['selectName'] : "");
?>
<select name="selectName">
<?php
for ($i = 0; $i < count($arrValues); $i++)
{
$opts = ($arrValues[$i] == $selectedValue) ? ' selected="selected"': '';
echo '<option value="' . $arrValues[$i] . '"' . $opts . '>' . $arrValues[$i] . '</option>';
}
?>
</select>
【讨论】:
count($arr)。每次迭代都会重新计算。为什么不直接使用 foreach?更简洁。
像这样创建您的选项。
$options = array("optionvalue" => "Option Name");
foreach($options as $value => $name)
{
if(isset($_POST['select_box']))
{
if($_POST['select_box'] == $value)
{
echo '<option selected="selected" value="'.$value.'">'.$name.'</option>';
continue;
}
}
echo '<option value="'.$value.'">'.$name.'</option>';
}
【讨论】:
$value => $name 比拥有它的方式更有意义。
当您生成选择框时,使用 POST 数据(如果可用)来选择被选中的项目(和/或对项目进行排序)。
有点像:
if($_POST["optval"] == $opt) $sel = "selected='selected'"; else $sel = "";
print "<option value='$opt' " . $sel . ">$opt</option>";
您自然会想要验证 POST 数据是否有效并且是否存在 (isset)。当然,假设您从 PHP 可访问的数据生成选择框,而不是静态定义它。
【讨论】: