2012-04-15 3 views
0

Просто интересно, почему мой код не работает. Я делаю это совершенно неправильно?Как назначить случайный цвет для ссылок?

window.onload = function random() { 
    var links = document.getElementsByTagName('a'); 
    var colours = new Array("green","red","blue"); 
    var randomColour = colours[Math.floor(colours.length * Math.random())]; 
    for (a = 0; a < links.length; a++) { 
     links[a].style.color = 'randomColour'; 
    } 
} 

ответ

1

'randomColor' ->randomColor.
Используйте переменную вместо цитируемой строки. Кроме того, чтобы гарантировать, что каждое звено получает случайный цвет, генерировать цвет в цикле:

for (var a = 0; a < links.length; a++) { 
    var randomColour = colours[Math.floor(colours.length * Math.random())]; 
    links[a].style.color = randomColour; 
} 

Чтобы минимизировать задержку между установкой цвета и разбором ссылки, связать DOMContentLoaded события, или просто вставить код в конце <body>:

http://jsfiddle.net/V6Chb/1/

<a>Test</a> 
    ... 
<a>Test</a> 
<script> 
(function() { // <-- Anonymous function to not leak variables to the global scope 
    var links = document.getElementsByTagName('a'); 
    var colours = ["green", "red", "blue"]; 
    for (var a = 0; a < links.length; a++) { 
     var randomColour = colours[Math.floor(colours.length * Math.random())]; 
     links[a].style.color = randomColour; 
    } 
})(); 
+0

Wow спасибо, такое простое решение проблемы! – Harry

+0

Вопреки тому, что вы утверждаете, это не * гарантирует *, что каждая ссылка получает другой цвет. Лучше всего было бы перетасовать массив цветов. Конечно, если есть больше ссылок, чем цвета, вы все равно не можете присвоить уникальный цвет ... просто говоря :) –

+0

@FelixKling Каждая ссылка получает один из цветов в массиве: http://jsfiddle.net/V6Chb/. Итак, когда массив содержит «красный» и «зеленый», и этот код используется на странице с, скажем, 1000 ссылками, то по крайней мере одна ссылка красная, и по крайней мере одна из них зеленая (в большинстве случаев). –

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