我有这个javascript + html来填充下拉菜单,但它不起作用,我做错了什么?注意我希望在页面加载时填充下拉菜单
<!DOCTYPE html>
<html>
<head>
<script>
function addList(){
var select = document.getElementById("year");
for(var i = 2011; i >= 1900; --i) {
var option = document.createElement('option');
option.text = option.value = i;
select.add(option, 0);
}
}
</script>
</head>
<body>
<select id="year" name="year"></select>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Kab*_*bie 23
由于您的脚本在<head>,您需要将其包装在window.onload:
window.onload = function () {
var select = document.getElementById("year");
for(var i = 2011; i >= 1900; --i) {
var option = document.createElement('option');
option.text = option.value = i;
select.add(option, 0);
}
};
Run Code Online (Sandbox Code Playgroud)
你也可以这样做
<body onload="addList()">
Run Code Online (Sandbox Code Playgroud)
为了获得更高的性能,我建议:
var select = document.getElementById("year");
var options = [];
var option = document.createElement('option');
//for (var i = 2011; i >= 1900; --i)
for (var i = 1900; i < 2012; ++i)
{
//var data = '<option value="' + escapeHTML(i) +'">" + escapeHTML(i) + "</option>';
option.text = option.value = i;
options.push(option.outerHTML);
}
select.insertAdjacentHTML('beforeEnd', options.join('\n'));
Run Code Online (Sandbox Code Playgroud)
这避免了在每个appendChild之后重绘,这大大加快了过程,特别是对于大量选项.
可选择手动生成字符串:
function escapeHTML(str)
{
var div = document.createElement('div');
var text = document.createTextNode(str);
div.appendChild(text);
return div.innerHTML;
}
Run Code Online (Sandbox Code Playgroud)
但是,我根本不会使用这些方法.
看起来很粗糙.您最好使用documentFragment执行此操作:
var docfrag = document.createDocumentFragment();
for (var i = 1900; i < 2012; ++i)
{
docfrag.appendChild(new Option(i, i));
}
var select = document.getElementById("year");
select.appendChild(docfrag);
Run Code Online (Sandbox Code Playgroud)