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)。
答案 0 :(得分:3)
您需要检查上次提交的值,以确定哪个选项应该接收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>";
答案 1 :(得分:0)
$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”,则“selected”将连接到标签作为其属性,从而给出输出:
<option value='en_US' selected>English(US)</option>
或者你可以做Jonathan的解决方案,它更优雅。