选择的选项总是落在第一个值中,莫名其妙


option to select always falls into the first value, inexplicable

echo "<td>Language</td>";
echo "<td><select id='language' name='language'>
            <option value=''>Select...</option>
            <option value='en_US'>English(US)</option>
            <option value='en_AU'>English(AU)</option>
            <option value='en_US'>English(UK)</option>
          </select>
      </td>";   

我将代码截图包含在一个表单中以发布 php 文件,当我选择提交表单时,我可以看到这些选项。但是,在我单击按钮以保存我选择的内容后,无论发生什么,上面的语言始终设置为第一个选项(en_US)。

您需要

检查上次提交的值,以确定哪个选项应接收 selected 属性。您当前未执行此操作,因此浏览器将第一个选项设置为所选选项。

// Define all languages
$l = array('en_US'=>'English(US)','en_AU'=>'English(AU)','en_UK'=>'English(UK)');
// Prepare an options variable
$o = "";
// Construct our options list
foreach ( $l as $k => $v )
  $o .= sprintf("<option value='%s'%s>%s</option>", 
          $k, $k === $_POST["language"] ? " selected" : "", $v);
// Echo our Select menu
echo "<select id='language' name='language'>$o</select>";

演示:http://codepad.org/PkwNYHbO

$selected = $_POST["language"];
echo "<td><select id='language' name='language'>
            <option value='' ".($selected==""?"selected":"").">Select...</option>
            <option value='en_US' ".($selected=="en_US"?"selected":"").">English(US)</option>
            <option value='en_AU' ".($selected=="en_AU"?"selected":"").">English(AU)</option>
            <option value='en_US' ".($selected=="en_US"?"selected":"").">English(UK)</option>
          </select>
      </td>";  

我通常会做这样的事情。第一部分获取发送到服务器的语言的值,然后检查每个选项的相同值,然后将"selected"放入具有相同值的元素。

在这种情况下,($selected=="en_US"?"selected":"")意味着,如果当前选择的语言是"en_US","选择"将作为其属性连接到标签,从而给出输出:

<option value='en_US' selected>English(US)</option>

或者你可以做乔纳森的解决方案,它更优雅。