Попытка создать ссылку со случайно выбранной страницей в массиве с помощью Javascript

Хорошо, мой код немного запутан, так как я все еще учусь на канатах Javascript и HTML, поэтому я постараюсь объяснить как можно лучше.

Я пытаюсь получить ссылку "продолжить" на нескольких html-страницах для ссылки на случайно выбранную страницу из массива. Я хочу, чтобы эта страница была удалена из массива, а затем массив был сохранен в sessionStorage, чтобы ссылка "продолжить" на следующей странице случайным образом выбрала ссылку из массива, который НЕ является текущей или прошлыми страницами.

Вот мой код:

var initialLinks=['music.html', 'test.html', 'recover.html', 'random.html']

function randomLink(){
if (typeof(Storage)!=="undefined")
{
    if (sessionStorage.links)
    {
        var storedLinks = JSON.parse(sessionStorage.links);
        var arraylink = storedLinks[Math.floor(Math.random()*storedLinks.length)];
        window.location = arraylink;

        var index = storedLinks.indexOf(arrayLink);
        if (index > -1){
            storedLinks.links.splice(index, 1);
        }
        sessionStorage.links = JSON.stringify(storedLinks);
    }
    else
    {
        sessionStorage.links = JSON.stringify(initialLinks);
        var storedLinks = JSON.parse(sessionStorage.links);
        var arraylink = storedLinks[Math.floor(Math.random()                            *storedLinks.length)];
        window.location = arraylink;

        var index = storedLinks.indexOf(arrayLink);
        if (index > -1){
            storedLinks.links.splice(index, 1);
        }
        sessionStorage.links = JSON.stringify(storedLinks);
    }
}
else
{
    document.write("Sorry, your browser does not support web storage.");
}

}

Я получаю ссылку "продолжить" для ссылки на случайные страницы, но страницы, похоже, остаются в массиве. Любая помощь будет принята с благодарностью. Кроме того, я заранее прошу прощения за мой небрежный стиль:)

3 ответа

Решение

Присмотревшись, я заметил и другие ошибки - arrayLink пишется строчными буквами L в window.location=arraylink, но в верхнем регистре в других местах. Также сохраненные ссылки.links.splice(index, 1); должен быть сохранен. Links.splice(index, 1); (без.links). И, как только вы посетили все свои страницы, вы попытаетесь загрузить "неопределенную" страницу, так как вы не реинициализируете свой массив.

Это работает для меня (не забудьте сохранить его под всеми именами файлов):

<script>

var initialLinks=['music.html', 'test.html', 'recover.html', 'random.html']

function randomLink(){
if (typeof(Storage)!=="undefined")
{
    if (sessionStorage.links)
    {
        alert("reading(1) "+sessionStorage.links);
        var storedLinks = JSON.parse(sessionStorage.links);
        if (storedLinks.length==0) {
            storedLinks=initialLinks;
        }
        var arraylink = storedLinks[Math.floor(Math.random()*storedLinks.length)];

        var index = storedLinks.indexOf(arraylink);
        if (index > -1){
            storedLinks.splice(index, 1);
        }
        sessionStorage.links = JSON.stringify(storedLinks);
        alert("saved(1) "+sessionStorage.links);
        window.location = arraylink;
    }
    else
    {
        sessionStorage.links = JSON.stringify(initialLinks);
        alert("reading(1) "+sessionStorage.links);
        var storedLinks = JSON.parse(sessionStorage.links);
        var arraylink = storedLinks[Math.floor(Math.random()                            *storedLinks.length)];

        var index = storedLinks.indexOf(arraylink);
        if (index > -1){
            storedLinks.splice(index, 1);
        }
        sessionStorage.links = JSON.stringify(storedLinks);
        alert("saved(2) "+sessionStorage.links);
        window.location = arraylink;
    }
}
else
{
    document.write("Sorry, your browser does not support web storage.");
}
}
</script>

<a href="javascript:randomLink()">Follow Link</a>

Я предполагаю, что это

window.location = arraylink;

загружает новый документ и предотвращает все остальное в вашем JavaScript. Поместите предупреждение (sessionStorage.links) за каждой операцией чтения и записи в sessionStorage, чтобы убедиться.

Данные сессии сохраняются только до тех пор, пока страница открыта. Вместо этого используйте localStorage.

Кроме того, вам нужно было склеить массив перед установкой window.location. Ваш сценарий не завершится, если вы перейдете на другую страницу прямо в середине блока.

Я немного почистил ваш код, и теперь он работает на меня. Вот ты где:

function randomLink() {

    if (typeof window.localStorage !== 'undefined') {

        // Create links initially if non-existent.
        if (typeof localStorage.links === 'undefined') {
            localStorage.links = JSON.stringify(initialLinks);
        }

        // Get links.
        var storedLinks = JSON.parse(localStorage.links);

        // Select random link.
        if (storedLinks.length > 0) {
            var randomIndex = Math.floor(Math.random()*storedLinks.length);
            var arraylink = storedLinks[randomIndex];

            // Remove the link from the array.
            storedLinks.splice(randomIndex, 1);

            // Update the saved link.
            localStorage.links = JSON.stringify(storedLinks);

            // Now go to the link.
            window.location = arraylink;
        }
        else {
            alert('All out of links!');
        }
    }
    else {
        document.write("Sorry, your browser does not support web storage.");
    }
}

randomLink();
Другие вопросы по тегам