-3

可能重复:
在 <select> 标记内而不是在 <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>

将“选定”添加到用户国家代码选项的最佳做法是什么?

我反对增加一百万如果。另请注意,国家/地区是用 HTML 硬编码的,因此没有数组。:(

4

5 回答 5

1

在 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在适当的地方添加。

于 2012-06-27T03:18:00.620 回答
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>
于 2012-06-27T03:18:30.043 回答
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; ?>
于 2012-06-27T03:21:32.837 回答
0

你最好的选择是用javascript来做

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

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

document.getElementById('countries').value = '<?=$country?>';
于 2012-06-27T03:08:30.823 回答
-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>
于 2012-06-27T03:12:06.427 回答