2016-12-07 6 views
0

したがって、私は、javacript関数ボディロードでを呼び出すhtmlファイルを持っています。そして、私は配列の要素を一つずつ表示したい。最初のロードでは、次のロードで ""と表示されます。3つのなどが表示されます。 しかし、それは私に最初の単語を表示し続けます。私が間違っていることを私に説明して解決策を提案できますか?事前にどうもありがとうございました!ここ JavaScript - 次の配列要素をロードする

は私のHTML

<html lang="en"> 
<head> 
<script src="/style/js/wordSet.js"></script> 
</head> 
<body> 
<body onload="getWord()"> 
<div id="character"></div> 
</body> 
</html> 

であり、それは私のwordSet.jsだ

function getWord(){ 
    var testList = ["one","three","right"] 

     var resultSet = testList.shift(); 
     document.getElementById("character").innerHTML = resultSet; 
} 
+1

HTMLはステートレスであるあなたが体をロードするたびに、配列がリセットされ、あなたがするためにクッキーを使用する必要があります。配列をシフトする変数を格納する – TheValyreanGroup

+1

...または['localStorage'](https://developer.mozilla.org/en/docs/Web/API/Window/localStorage) – Jamiec

+1

これは単純ですが、あなたのページとjavascriptは負荷がかかった後に再び起動します。あなたは何らかの形でページの状態を保持する必要があります。クッキーまたはlocalStorageを使用してこれにアクセスできます。 –

答えて

1

とき/あなたが近いです。すべてのは、あなたが消えて行った変更ページを更新して使用してtestList配列を永続localStorage:。

function getWord() { 
    var original = ["one", "three", "right"]; 
    // try to retrieve array from localStorage, return default if it doesn't exist 
    var testList = localStorage.testList ? JSON.parse(localStorage.testList) : original ; 
    var resultSet = testList.shift(); 
    // store the array in localStoarge after you change it 
    localStorage.testList = JSON.stringify(testList.length ? testList : original); 
    document.getElementById("character").innerHTML = resultSet; 
} 
+0

ありがとう、それは今完全に動作します!しかし、「シフト」が終わった後は、定義されていません。無限ループにする可能性はありますか? –

+1

編集を参照してください。 –

+0

あなたは素晴らしいオリです、ありがとう! 最初のページは常に1から始まり、reloadは単語を変更してはいけないと編集する必要がありますが、今は方法を見つけるでしょう。 ありがとうございました。ありがとうございます。 –

1
関数を呼び出すたびに、配列が再初期化され、すべての値は、それに戻され

。配列の外に初期化することで、その問題を解決できます。

これは、ページを読み込むたびにプログラムを最初から再起動するという2番目の問題を解決します。

あなたは、このようなのlocalStorageまたは配列にあなたが持っている場所を追跡して、ページのロード時にそれを読むためにクッキーなど、いくつかの永続ストレージを(使用する必要があります。

関連する問題