我有以下代码:
<html>
<head>
</head>
<body>
<select name="" id="dia">
<script>
var d = new Date();
var selector = document.getElementById('dia');
for(var i = 1; i < 32; i++){
var toprint = "<option>"+i+"</option>";
document.write(toprint);
if(i==d.getDate()){
selector.selectedIndex = i
}
}
</script>
</select>
<select name="" id="mes"></select>
<select name="" id="anyo"></select>
</body>
</html>
select元素按预期填充选项,但索引未正确设置。我已经分开尝试了每个组件,但我不知道它为什么不起作用。
selector.selectedIndex
在我在控制台中使用时可以正常工作i
显然是一个有效的数字,因为它在循环中迭代。Javascript console
不会显示任何错误或异常。所以我认为没有错别字。if
内放置提醒,确实有效。所以我假设代码正在输入if
子句。selectedIndex
置于循环之外,但它也无法正常工作。所以...我错过了什么?我真的没有想法。
答案 0 :(得分:1)
你的i从1变为31,但是selectIndex从0开始。所以如果当天是15,那么你正在尝试选择第15项的第15项,而你还没有添加它。
例如,此代码有效:
<select name="" id="dia">
<script>
var d = new Date();
for (var i = 1; i < 32; i++) {
var toprint = "<option>" + i + "</option>";
document.write(toprint);
}
var selector = document.getElementById('dia');
selector.selectedIndex = d.getDate() - 1
</script>
</select>
<select name="" id="mes"></select>
<select name="" id="anyo"></select>
或者,只需最少的更改,您的代码就可以重写为:
<select name="" id="dia">
<script>
var d = new Date();
var selector = document.getElementById('dia');
for (var i = 0; i < 31; i++) {
var day = i + 1;
var toprint = "<option>" + day + "</option>";
document.write(toprint);
if (day == d.getDate()) {
selector.selectedIndex = i
}
}
</script>
</select>
<select name="" id="mes"></select>
<select name="" id="anyo"></select>
请注意,将JavaScript代码与HTML混合是一种非常糟糕的做法,您应该在了解更多信息时尝试远离这一点。
答案 1 :(得分:0)
因为当您设置时,当前i
的选项不存在。
在循环之后设置它,并减去1
,以便获得正确的基于零的索引。
<select name="" id="dia">
<script>
var d = new Date();
var selector = document.getElementById('dia');
for(var i = 1;i<32;i++){
var toprint = "<option>"+i+"</option>";
document.write(toprint);
}
selector.selectedIndex = d.getDate() - 1;
</script>
</select>
<select name="" id="mes"></select>
<select name="" id="anyo"></select>
&#13;
答案 2 :(得分:0)
我不确定,但为什么if
声明甚至是必要的呢?
<select name="" id="dia">
<script>
var d = new Date();
var selector = document.getElementById('dia');
for (var i = 1; i < 32; i++) {
var toprint = "<option>" + i + "</option>";
document.write(toprint);
}
selector.selectedIndex = d.getDate();
</script>
</select>
答案 3 :(得分:0)
你必须设置
document.getElementById("option-id").selected = "true";