从匹配变量中将“selected”添加到选项中

时间:2012-06-27 03:05:32

标签: php option selected

  

可能重复:
  Any way to define selected inside <select> tag rather than on <option>

我有$ country存储用户的2个字母的国家/地区代码。例如美国。

<select id="countries">                     
    <option value="US">United States</option>
    <option value="EN">England</option>
    <option value="AU">Australia</option>
    <option value="CA">Canada</option>
    etc.
</select>

将“已选择”添加到用户国家/地区代码选项的最佳做法是什么?

我反对增加一百万if。另请注意,这些国家/地区采用HTML编码,因此没有数组。 :(

5 个答案:

答案 0 :(得分:0)

你最好的选择是在javascript中完成

$('#countries').val('<?=$country?>');

这需要jquery,但它可以在vanilla javascript中完成

document.getElementById('countries').value = '<?=$country?>';

答案 1 :(得分:0)

在PHP中:

$options = '<option value="US">United States</option>
    <option value="EN">England</option>
    <option value="AU">Australia</option>
    <option value="CA">Canada</option>';

$code = "CA";
$pattern = sprintf('/value="%s"/m', $code);
$replace = sprintf('value="%s" SELECTED', $code);
$out = preg_replace($pattern, $replace,$options);

printf('<select id="countries">%s</select>', $out);

输出:

<select id="countries">
    <option value="US">United States</option>
    <option value="EN">England</option>
    <option value="AU">Australia</option>
    <option value="CA" SELECTED>Canada</option>
</select>

基本上,您只需将所有option标记转储到一个巨大的PHP字符串中,然后运行正则表达式搜索并替换为适当时添加SELECTED

答案 2 :(得分:0)

除非您使用数组填充选项,否则无法以您希望的方式使用PHP解决方案。

在JavaScript中,您可以编写一个小函数来设置所选值(假设您没有使用jQuery):

function setOption(id, value)
{
    var selectBox = document.getElementById(id),
    options = selectBox.options;

    for (var i in options) {
        if (options[i].value == value) {
            selectBox.selectedIndex = i;
            return;
        }
    }
}

然后,使用PHP在选择框后创建脚本标记:

<script>setOption('countries', '<?php echo 'US'; ?>');</script>

答案 3 :(得分:0)

不理解这个问题:我没有读完所有问题:(

我处理这个问题的方法是构建一个包含所有国家/地区的数组,然后根据foreach循环中的值测试$ _POST或存储的值:

$countries = array("US" => "United States", "EN" => "England");

然后是以下形式:

<?php foreach ($countries as $abbr => $display): ?>
  <?php if (array_key_exists($result['country'], $countries)): ?>
    <option value="<?php echo $abbr; ?>" selected="selected"><?php echo $display; ?></option>
  <?php else: ?>
    <option value="<?php echo $abbr; ?>"><?php echo $display; ?></option>
  <?php endif; ?>
<?php endforeach; ?>

答案 4 :(得分:-2)

我不是这方面的专家,但我想这可能是一个解决方案

<select id="countries">                     
    <option value="US" <?php if($country=='US') echo 'selected'; ?> >United States</option>
    <option value="EN" <?php if($country=='EN') echo 'selected'; ?> >England</option>
    <option value="AU" <?php if($country=='AU') echo 'selected'; ?> >Australia</option>
    <option value="CA" <?php if($country=='CA') echo 'selected'; ?> >Canada</option>
    etc.
</select>