2013-12-06 5 views
0

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

Я пытаюсь получить ссылку «продолжить» на нескольких страницах 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."); 
} 

}

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

ответ

0

Осмотревшись, я заметил и некоторые другие ошибки: arrayLink написан с нижним регистром L в window.location = arraylink, но в верхнем регистре в другом месте. Кроме того, storedLinks.links.splice (index, 1); должен быть сохраненLinks.splice (индекс, 1); (без .links). И после того, как вы посетили все свои страницы, вы попытаетесь загрузить страницу «undefined», так как вы не будете повторно инициализировать свой массив.

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

<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> 
+0

Определенно собираюсь продвигать это (если я могу задним числом получить мой голос)! Благодаря! – gsmith83

0

Я предположил бы, что это

window.location = arraylink; 

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

+0

Спасибо за быстрый ответ, Гунтрам. Я добавил несколько предупреждающих инструкций, и, хотя мое второе предупреждение после показанной выше строки кода отображается, предупреждения после моего оператора splice() не отображаются. Любая идея лучшего способа получить мою случайно выбранную страницу html внутри моей ссылки ? – gsmith83

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