尝试使用Javascript在数组中随机选择页面创建链接

时间:2013-12-06 18:45:58

标签: javascript arrays sessionstorage

好吧,我的代码有点乱,因为我还是一个学习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 个答案:

答案 0 :(得分:0)

我猜这个

window.location = arraylink;

加载新文档并阻止其他所有javascript发生。在sessionStorage的每个读写操作后面放置一个警报(sessionStorage.links)以确保。

答案 1 :(得分:0)

仔细观察,我也注意到了其他一些错误 - 在window.location = arraylink中使用小写L编写arrayLink,但在大写的其他地方。另外,storedLinks.links.splice(index,1);应该是storedLinks.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>

答案 2 :(得分:0)

只有页面打开时,

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