Есть мнение, что страница перегружается.
поставьте:
<button type="button" id="play">Играть!</button>
По дефолту - сабмит - форму отправляет.
а что ваш скрипт должен делатЬ?(по какому принципу менять?)
UPD: Чтобы заработал скрипт триггер на "onload" уберите
var ab = ["а", "б", "в", "г", "д", "е", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т"];
var LettersDiv = document.getElementById('letter');
var playBtn = document.getElementById('play');
playBtn.addEventListener('click',function(){
var rand = 0;
rand = 0 + Math.floor(Math.random() * (ab.length + 1));
LettersDiv.innerHTML = ab[rand];
})
Он иногда еще undefined кидает, потому что
"rand" становится > длины массива с буквами. Сделайте проверку на длину выхода.
rand = Math.floor(Math.random() * (ab.length + 1));
if(rand>=ab.length)rand = ab.length