我不确定我的while循环或代码的innerHTML部分是否有问题,但是当点击提交按钮时,我无法在div标签中显示下拉列表。任何人都可以看到它的错误。
<html>
<head>
<script type="text/javascript">
function getvalue() {
number = document.getnumber.input.value;
document.getElementById("result").value = number;
}
</script>
</head>
<body>
<script>
function generatedropdown() {
html = '<select name="select" id="i">';
while (i < number) {
html+='<option>Test 1</option>';
html+='<option>Test 2</option>';
html+='<option>Test 3</option>';
html+='<option>Test 4</option>';
html+='<option>Test 5</option>';
i++;
}
html+='</select>';
document.getElementById("my-output").innerHTML = html;
}
</script>
<form name="getnumber">
Input number: <input type="text" name="input">
<input type="button" value="Next" onClick="getvalue()">
</form>
<form id="showlists">
Number entered: <input type="text" id="result" readonly="readonly">
<input type="button" value="Show lists" onClick="generatedropdown()">
<div id="my-output">Generated List:</div>
</form>
</body>
</html>
答案 0 :(得分:5)
一些问题:
您从未为i
设置初始值,因此代码会抛出错误,因为您正在尝试读取您从未设置或声明的全局值。
您依靠getvalue
被调用来初始化number
,我不会指望它。
您依赖隐式字符串 - &gt;号码转换,我不推荐;使用parseInt
来解析用户提供的数字。
(可选)您的循环正是for
构造的设计目标,而不是while
(如果初始化while
,i
会起作用
你正在成为The Horror of Implicit Globals的牺牲品,因为你永远不会宣布你的变数。
我建议您阅读一本关于JavaScript的好的入门或教程,以掌握基础知识。
这是 minimal 更新:
function generatedropdown() {
// Declare your variables
var html, i, number;
// Get the number, and convert it from a decimal string
// to a number explicitly rather than relying on implicit
// coercion
number = parseInt(document.getvalue.input.value, 10);
// Probably bail if it's not a number
if (isNaN(number)) {
return;
}
// (Optional, but you were doing it) Show the number
document.getElementById("result").value = number;
// Build your HTML
html = '<select name="select" id="i">';
// This is exactly what `for` loops are for
for (i = 0; i < number; ++i) {
html+='<option>Test 1</option>';
html+='<option>Test 2</option>';
html+='<option>Test 3</option>';
html+='<option>Test 4</option>';
html+='<option>Test 5</option>';
}
html+='</select>';
document.getElementById("my-output").innerHTML = html;
}