可能重复:
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编码,因此没有数组。 :(
答案 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>