2012-05-21 2 views
0

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

나는 commentor의 조언을 시도했지만 여전히 도움이되지는 않지만 도움을 요청합니다. 매우 감사드립니다!

+0

브라우저가 오류를 제공합니까? – wong2

+0

난수를 얻는 더 좋은 방법은 Math.floor (Math.random() * 255) – SomeKittens

+0

입니다. 숫자가 증가하고 메시지가 계속 표시됩니다. Uncaught ReferenceError : 값이 정의되지 않았습니다. –

답변

3

나는 eval처럼 해당 문자열, 그리고 어떤 변수 valuespanArray에서이 없기 때문에 코드, 글로벌 환경에서 실행됩니다, 당신은 setInterval의 첫 번째 매개 변수로 문자열을 통과 할 때 문제가 setInterval("keepMove(value,spanArray)",10)

생각 글로벌 환경에서는 코드가 제대로 실행되지 않습니다. 예를 들어

:

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); 

+0

나는 그것을 감사하고 수업을 배웠고, 지금 오류가 없습니다. 하지만 게시 한 후에 전체 페이지가 숫자 만 남았습니까? 나는 이유를 이해할 수 없다? –

+0

@ Liang-YuPan 코드로 데모를 만들었고, 제게 잘 작동합니다 : http://jsfiddle.net/Lkfhf/'keepMove'에서'document.write'를 제거해야하지만, 그렇지 않습니다. 큰일이다. – wong2

+0

오, 선을 제거한 후에 작동합니다. 도움을 청합니다! –

1

보십시오 당신이 setInterval을 사용 방식을 변경할 수 있습니다. 값과 spanArray 변수에 액세스하려면 클로저를 사용해야합니다. 에서는 setTimeout 글로벌 컨텍스트에서 실행되며, 거기에서 당신이 그 개인 바르에 액세스 할 수 있기 때문이다

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

.