我正在摆弄javascript来掌握它。我试图以编程方式构建一个x x网格 - 我最终会试图成为扫雷。我有一个函数用x条目写一行。我有另一个循环的函数,调用单行函数x次。想法是通过调用行函数x次,我将获得x x x网格。但在我当前的代码中,循环函数调用单行函数1次,我无法弄清楚原因。当我使用警报来计算迭代次数时,循环会触发五次 - 但是当包含writeOneRow函数时则不会触发。我在IE和Chrome中得到了同样的行为。任何人都可以指出我的(可能是傻瓜)错误:
<html>
<body>
<script type="text/JavaScript">
function writeRows(loop) {
for (i=0;i<loop;i++){
writeOneRow(loop); //this is only called once. Why?
}
}
function writeOneRow(num) {
var b = "<Div style='float:left; border-style:solid; margin:10px'> Test </div>"
var string =""
for (i=0;i<num;i++){
string= string+ b ;
}
var line = document.createElement('div');
line.innerHTML = string ;
document.body.appendChild(line);
}
</script>
<a href="#" onclick="javascript:writeRows(5);return false;">InsertRow</a>
</body>
</html>
答案 0 :(得分:7)
您的变量i
是全局的。使用var
将其设为本地。
for (var i=0;i<num;i++){
...
for (var i=0;i<num;i++){
答案 1 :(得分:2)
我的JavaScript有点生疏,但你永远不会将我声明为局部变量,所以我认为for循环都修改了相同的i,因此它在第二个函数内部命中5,第一个循环只运行一次。
尝试添加var i;在for循环之前的两个函数中,这将在每种情况下创建一个局部变量,并应解决问题。 干杯!
答案 2 :(得分:0)
我不确定我是否理解正确,但这可能会有所帮助......
更改行:
line.innerHTML = string ;
要:
line.innerHTML = line.innerHTML + string;
比你不再需要第二个for循环你可以做到:
var string = b;