【发布时间】:2009-05-14 18:40:26
【问题描述】:
我有一个 SELECT 元素,我需要根据在文本字段中输入的邮政编码的前半部分自动选择适当的选项。英国邮政编码的格式为 AB12 3CD,其中第一部分由代表县的 1-2 个字母和代表县内区域的数字组成。最后 3 个字符与此问题无关。
对于大多数字段,它仅基于首字母,但对于某些选项,它是邮政编码范围。 HTML 应该解释得最好:
<select id="country_field">
<option value="">Select</option>
<option value="AB">AB (Aberdeen)</option>
<option value="AL">AL (St. Albans)</option>
<option value="B">B (Birmingham)</option>
<option value="BA">BA (Bath)</option>
...
<option value="DD1">DD 1-7 (Dundee)</option>
<option value="DD8">DD 8-11 (Dundee)</option>
...
</select>
当值正好是两个字母时,我下面的代码当前将选择正确的元素。但我需要将其扩展为包含单字母代码(伯明翰)和邮政编码范围(邓迪)。注意:如果有保证特殊值的解决方案,我可以更改选项值,例如DD1/DD2 而不是 DD1/DD8。
简而言之:
- B2 --> 伯明翰
- BA3 --> 巴斯
- DD5 --> 第一个邓迪 [DD1]
- DD11 --> 第二个邓迪 [DD8]
这是我到目前为止的 Javascript...
window.onload = function()
{
// postcode INPUT field
var zipInput = document.getElementById( 'zip_field' );
// county SELECT field
var ctySelect = document.getElementById( 'county_field' );
zipInput.onchange = function()
{
var zipValue = zipInput.value;
var ctyOptions = ctySelect.options;
for ( i = 0; i < ctyOptions.length; i++ )
{
if ( zipValue.substring(0,2) == ctyOptions[i].value )
ctyOptions[i].selected = true;
}
}
}
【问题讨论】:
-
别忘了把 var 关键字放在 "i = 0" 前面,以免 i 变量污染全局范围。
标签: javascript regex select option postal-code