2012-05-21 2 views
0

Я хочу изменить число путем chooesing 6 чисел из 49 чисел, поэтому сначала я объявил div и имел шесть пролетов в нем, чтобы содержать число.Номер продолжает меняться

И я хочу изменить его 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

Я пробовал совет комментатора, но все еще не работал, но THX за вашу помощь! Я очень ценю это!

+0

У браузера вы обнаружите ошибки. – wong2

+0

Я считаю, что лучший способ получить случайные числа - это Math.floor (Math.random() * 255) – SomeKittens

+0

Число продолжает увеличиваться и сообщение: Uncaught ReferenceError: значение не определено –

ответ

3

Я думаю, что проблема setInterval("keepMove(value,spanArray)",10)

, когда вы передаете строку в качестве первого параметра setInterval, это как eval эта строка, и код будет работать в глобальной среде, потому что нет ни одной переменной value и 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

Вы можете попробовать:

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

+0

Я ценю это и выучил урок, теперь нет ошибки. Но после того, как я опубликовал его, вся страница пришла только к номеру? Я не понимаю, почему? –

+0

@ Liang-YuPan Я сделал демо с вашими кодами, и он отлично подходит для меня: http://jsfiddle.net/Lkfhf/ вы должны удалить 'document.write' в' keepMove', но я думаю, что это не большое дело. – wong2

+0

О, он работает после удаления линии. Тхх за вашу помощь! –

1

Попробуйте изменить способ использования setInterval. Вы должны использовать закрытие, чтобы иметь возможность доступа к значениям и vararray.

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

Это потому, что SetTimeout будет выполняться на глобальном контексте, а оттуда вы не можете получить доступ к этому частному ВАРУ.

Смежные вопросы