【问题标题】:How to Maintain Persistence State of a Dropdown with JavaScript Disabled - PHP如何在禁用 JavaScript 的情况下维护下拉菜单的持久状态 - PHP
【发布时间】:2012-06-27 08:09:38
【问题描述】:

我正在用 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>

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

我在 Google 上进行了一些搜索,但并没有真正找到对这类事情非常有用的东西,所以我不确定下一步该去哪里。有什么想法/建议吗?

非常感谢您!

【问题讨论】:

标签: php javascript drop-down-menu persistence


【解决方案1】:

我通常会做以下事情:

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

它的作用是打印出您所描述的选择框,但它会向与您的 $_POST 变量匹配的选项添加一个 selected="selected" 属性。

【讨论】:

  • 感谢您的技巧。我也喜欢备用语法版本。
  • 一个快速的问题。似乎即使查看源显示了预期的输出,下拉菜单的行为似乎也很奇怪,就像验证失败后它显示为空白,或者它在它应该是之前显示的数组项......知道为什么这可能是吗?
  • 没关系。我想到了。我已将 if 语句拆分为非替代语法,以便更好地了解确切的过程,但我忘记添加结束 &lt;/option&gt; 标记。干杯。
【解决方案2】:
<?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>

【讨论】:

    猜你喜欢
    • 2019-01-04
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多