javascript - Javascript - 选择选项不起作用
问题描述
当用户输入一个值时,我有一个可以从下拉列表中选择选项的表单。
例如:输入值880520
实际上会选择Year:1988 Month:May Day:20
.
javascript函数:
<script type="text/javascript">
function completeDOB() {
var x = document.getElementById('textvalue').value;
var str = x.match(/.{1,2}/g);
var day = parseInt(str[2],10) +1;
document.getElementById("dob-day").options[day].selected=true;
var month = parseInt(str[1],10) +1;
document.getElementById("dob-month").options[month].selected=true;
var year = parseInt(19+str[0],10);
document.getElementById("dob-year").options[year].selected=true;
}
</script>
我正在使用onblur
文本字段来执行该completeDOB
功能。
<input name="textvalue" type="text" id="textvalue" onblur="completeDOB()">
但是,所选选项仅适用于Day
and Month
,而Year
不起作用。
下拉列表代码Year
:
<select name="dob_year" id="dob-year">
<option value="">Year</option>
<option value="">----</option>
<?php
$date = (int) date('Y');
$numYears = 100;
for ($i=$date; $i >= $date - $numYears; $i--) {
echo "<option value=\"$i\">$i</option>";
}
?>
</select>
另外,我检查了页面的源代码,选项值很好。
<option value="2018">2018</option><option value="2017">2017</option><option value="2016">2016</option><option value="2015">2015</option><option value="2014">2014</option><option value="2013">2013</option><option value="2012">2012</option><option value="2011">2011</option><option value="2010">2010</option><option value="2009">2009</option><option value="2008">2008</option><option value="2007">2007</option><option value="2006">2006</option><option value="2005">2005</option><option value="2004">2004</option><option value="2003">2003</option><option value="2002">2002</option><option value="2001">2001</option><option value="2000">2000</option><option value="1999">1999</option><option value="1998">1998</option><option value="1997">1997</option><option value="1996">1996</option><option value="1995">1995</option><option value="1994">1994</option><option value="1993">1993</option><option value="1992">1992</option><option value="1991">1991</option><option value="1990">1990</option><option value="1989">1989</option><option value="1988">1988</option><option value="1987">1987</option><option value="1986">1986</option><option value="1985">1985</option><option value="1984">1984</option><option value="1983">1983</option><option value="1982">1982</option><option value="1981">1981</option><option value="1980">1980</option><option value="1979">1979</option><option value="1978">1978</option><option value="1977">1977</option><option value="1976">1976</option><option value="1975">1975</option><option value="1974">1974</option><option value="1973">1973</option><option value="1972">1972</option><option value="1971">1971</option><option value="1970">1970</option><option value="1969">1969</option><option value="1968">1968</option><option value="1967">1967</option><option value="1966">1966</option><option value="1965">1965</option><option value="1964">1964</option><option value="1963">1963</option><option value="1962">1962</option><option value="1961">1961</option><option value="1960">1960</option><option value="1959">1959</option><option value="1958">1958</option><option value="1957">1957</option><option value="1956">1956</option><option value="1955">1955</option><option value="1954">1954</option><option value="1953">1953</option><option value="1952">1952</option><option value="1951">1951</option><option value="1950">1950</option><option value="1949">1949</option><option value="1948">1948</option><option value="1947">1947</option><option value="1946">1946</option><option value="1945">1945</option><option value="1944">1944</option><option value="1943">1943</option><option value="1942">1942</option><option value="1941">1941</option><option value="1940">1940</option><option value="1939">1939</option><option value="1938">1938</option><option value="1937">1937</option><option value="1936">1936</option><option value="1935">1935</option><option value="1934">1934</option><option value="1933">1933</option><option value="1932">1932</option><option value="1931">1931</option><option value="1930">1930</option><option value="1929">1929</option><option value="1928">1928</option><option value="1927">1927</option><option value="1926">1926</option><option value="1925">1925</option><option value="1924">1924</option><option value="1923">1923</option><option value="1922">1922</option><option value="1921">1921</option><option value="1920">1920</option><option value="1919">1919</option><option value="1918">1918</option>
而且我真的不知道为什么只有Year
列表不起作用,而其他两个工作正常。
更新:
我尝试手动输入选择选项,结果程序识别选项值如下:
<option value="03">2018</option>
<option value="04">2017</option>
<option value="05">2016</option>
etc.
我将如何解决问题?期权价值是否必须从 01 开始?
解决方案
你options
是一个HTMLOptionsCollection。您实际上是options
通过它们的索引访问day
and month
,而不是使用它们的值。
幸运的是,我敢打赌,您的日期和月份 selectElements 定义了它们的第 0个索引,因此下一个索引与您的day
值相匹配month
。
但是,这不适用于您的year
selectElement。您将需要option
根据其年份值选择正确的元素,并将其设置selected
为true
.
例如
function completeDOB() {
var x = document.getElementById('textvalue').value;
var str = x.match(/.{1,2}/g);
var day = parseInt(str[2],10) +1;
document.getElementById("dob-day").options[day].selected=true;
var month = parseInt(str[1],10) +1;
document.getElementById("dob-month").options[month].selected=true;
var year = parseInt(19+str[0],10);
var year_options = [].filter.call(document.getElementById('dob-year').options, function (opt) {
return opt.value == year
});
if (year_options && year_options.length) {
year_options[0].selected = true;
}
}
推荐阅读
- c# - Directory.Exists 在 FileSystemWatcher ArgumentException 之后返回 false
- tensorflow - 转换后的 Tensorrt 模型与 Tensorflow 模型的输出形状不同?
- javascript - Ag-Grid 外部过滤不响应状态变化
- boto3 - 如何使用 boto3 连接到 Openstack Swift
- c++ - 多继承,从并行虚拟类访问对象
- chef-infra - 如何摆脱 Let's Encrypt 上的“域验证失败”(ACME 协议)
- arduino - 我对 HTTPClient 库的 POST 请求有 JSON 问题
- ios - 委托和回调不适用于传递模型数据
- php - Magento 2 安装 Windows 管理员损坏的链接
- r - 在并行 foreach 中使用 S4 对象类