号码不断变化

时间:2012-05-21 14:24:13

标签: javascript

我想通过从49个数字中选择6个数字来更改数字,所以首先我声明了一个div并且在其中包含6个数字以包含数字。

我想通过getElementByTagName更改它以指定一个与setInterval结合的新数字,以使其始终发生变化但不起作用。

我错在哪里?

THX。

function computeRandom(){

var value = new Array(49);//declare array


    for ( i = 0; i < 49; i++ )//initial array_value
        value[i] = i+1;



    for ( i = 0 ;i < 100; i++ ) {//random arrange
        x = parseInt(Math.random()*49);
        y = parseInt(Math.random()*49);
        tmp = value[x];
        value[x] = value[y];
        value[y] = tmp;     
    }


var color = new Array(49);

    for ( i = 0; i < 49; i++ )//store color
        color[i] = "rgb(" + parseInt(Math.random()*255) + "," + parseInt(Math.random()*255) + "," + parseInt(Math.random()*255) + ")";      

    var value_tmp = new Array(6);

    for( i = 0; i < 6; i++)
        value_tmp[i] = value[i];

    document.write("<div style = \"text-align:center;\" >");//center the text by div

        for( i = 0; i < 6; i++)
            document.write("<span  style = \"font-size: 2.5em; display:inline-block; text-align:center; width: 1.5em; background: white; color: " + color[i] + " \" > " 
            + value_tmp[i] + "</span>&nbsp&nbsp&nbsp&nbsp&nbsp");

    var spanArray = document.getElementsByTagName("span");

    setInterval("keepMove(value,spanArray)",10);
    }

function keepMove(val,sp){  

var index = parseInt(Math.random()*43);//set a increment to avoid repeatition

for( i = 0; i < sp.length; i++){
    sp[i].innerHTML = val[i+index];
    document.write(sp[i].innerHTML+"  ");
}
}

CSS:

#bg {
background: grey;
opacity: 0.8;
}


#hl {
text-align: center;
color: white;
}

HTML: 对不起,我不知道如何发布HTML? http://codepad.org/IrSOsjg7

我已经尝试了评论员的建议,但仍然没有工作,但是你的帮助! 我非常感激!

2 个答案:

答案 0 :(得分:3)

我认为问题是setInterval("keepMove(value,spanArray)",10)

当您将字符串作为setInterval的第一个参数传递时,它就像eval那个字符串,并且代码将在全局环境中运行,因为没有变量value和{ {1}}在全局环境中,代码将无法正常运行。

例如:

spanArray

这将收到错误function foo(x, y) { alert(x + " " + y); } function bar() { var x = 100, y = 200; setInterval("foo(x, y)", 1000); } bar();

您可以尝试:

x is not defined

答案 1 :(得分:1)

尝试更改使用setInterval的方式。您应该使用闭包来访问值和spanArray变量。

setInterval(function(value, spanArray) { 
        return function() {
            keepMove(value,spanArray)
        }
    }(value, spanArray),10);
}

那是因为setTimeout将在全局上下文中执行,从那里你无法访问那些私有变量。