0

49 個の数字から 6 個の数字を選択して数字を変更したいので、最初に div を宣言し、その中に 6 つのスパンを含めて数字を含めます。

そして、getElementByTagName で変更して、setInterval と組み合わせて新しい番号を割り当て、常に変更されるようにしたいのですが、うまくいきません。

私の間違った場所はどこですか?

どうも。

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

コメンターのアドバイスを試してみましたが、まだうまくいきませんが、助けてくれてありがとう! とても感謝しています!

4

2 に答える 2

3

問題はsetInterval("keepMove(value,spanArray)",10)

の最初のパラメーターとして文字列を渡すと、その文字列setIntervalのよう になりeval、変数がなく、グローバル環境ではコードが正しく実行されないため、コードはグローバル環境で実行されます。valuespanArray

例えば:

function foo(x, y) {
    alert(x + " " + y);
}

function bar() {
    var x = 100, y = 200;

    setInterval("foo(x, y)", 1000);
}

bar();

これはエラーになりますx is not defined

あなたが試すことができます:

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

</p>

于 2012-05-21T14:32:37.233 に答える
1

setInterval の使用方法を変更してみてください。値と spanArray 変数にアクセスできるようにするには、クロージャを使用する必要があります。

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

これは、setTimeout がグローバル コンテキストで実行され、そこからこれらのプライベート変数にアクセスできないためです。

于 2012-05-21T14:37:58.820 に答える