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

时间:2012-05-15 02:53:43

标签: php html optional-parameters

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

2 个答案:

答案 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>";

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

答案 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的解决方案,它更优雅。