如何在禁用 JavaScript 的情况下维护下拉列表的持久性状态 - PHP

How to Maintain Persistence State of a Dropdown with JavaScript Disabled - PHP

本文关键字:持久性 下拉列表 状态 PHP 维护 情况下 JavaScript      更新时间:2023-09-26

我正在用PHP进行一些表单编码,当启用JavaScript时,我一切都运行良好。 但是从过去的经验和当JavaScript被禁用时其他网站表现不佳的糟糕经验来看,我想我会在当前的项目中更加关注它。

关于input type="text" POST 字段,这不是问题。 但是对于我碰巧使用的下拉菜单,我无法让它持续存在。 好吧,我可以,但是默认选择不正确。 这是一些代码...

基本下拉结构:

<select id="topic" name="topic">
    <option value="Select an option">Select an option</option>
    <option value="Topic A">Topic A</option>
    <option value="Topic B">Topic B</option>
    <option value="Topic C">Topic C</option>
</select>

我想也许如果我selected与 POST 数据混合,我可以让它像这样工作:

<select id="topic" name="topic">
    <option selected="selected" value="Select an option">Select an option</option>
    <option value=""><?php echo $_POST['topic']; ?></option>
    <option value="Topic A">Topic A</option>
    <option value="Topic B">Topic B</option>
    <option value="Topic C">Topic C</option>
</select>

但它不会持续存在;它只会回到默认值"选择一个选项"。

尝试此操作也不起作用:

<select id="topic" name="topic">
    <option value="Select an option">Select an option</option>
    <option selected="selected" value=""><?php echo $_POST['topic']; ?></option>
    <option value="Topic A">Topic A</option>
    <option value="Topic B">Topic B</option>
    <option value="Topic C">Topic C</option>
</select>

它仍然存在,但没有正确的默认值。 开头为空白(因为尚未输入开机自检)。

我已经做了一些谷歌搜索,并没有真正找到任何对这种事情非常有用的东西,所以我不确定下一步该去哪里。 有什么想法/建议吗?

提前非常感谢!

我通常会做如下事情:

<select id="topic" name="topic">
<option value="Select an option">Select an option</option>
<?php
    $topics=Array("Topic A","Topic B","Topic C");
    foreach($topics as $topic){
        echo '<option value="'.$topic.'"'.($_POST['topic']==$topic?' selected="selected"':'').'>'.$topic.'</option>';
    }
?>
</select>

这样做是按照您的描述打印出选择框,但它会将 selected="selected" 属性添加到与您的 $_POST 变量匹配的选项中。

<?php 
$topic='';
if isset($_POST)
  if is_array($_POST)
    if isset($_POST['topic'])
      $topic=$_POST['topic'];
?>
<select id="topic" name="topic">
    <option value="Select an option">Select an option</option>
    <option value="Topic A"<?php if($topic=='Topic A') echo ' selected="selected"'; ?>>Topic A</option>
    <option value="Topic B"<?php if($topic=='Topic B') echo ' selected="selected"'; ?>>Topic B</option>
    <option value="Topic C"<?php if($topic=='Topic C') echo ' selected="selected"'; ?>>Topic C</option>
</select>