Ainsi, mes valeurs localStorage dans le tableau sont remplacées après l'actualisation. Pendant la session, je peux changer les valeurs sur front end et array dans localStorage sera constamment mis à jour ou si plus d'entrées ont changé, alors plus de valeurs à ajouter au tableau. Si par exemple j'ai eu 3 entrées changées et toutes leurs valeurs ont été ajoutées au tableau localStorage dans la session puis après l'actualisation de page Web si je modifierai une des entrées encore, tous les tableaux dans localStorage seront supprimés et écrasés par la nouvelle mise à jour de session de contribution. J'essaye de comprendre ceci pendant longtemps, mais ne peux pas comprendre comment le faire fonctionner ainsi qu'après l'actualisation toutes les valeurs d'entrée seraient stockées dans l'ancien tableau et pas écrasées.Le tableau localStorage est en cours d'écrasement après l'actualisation
var presetsArr = [];
if (!localStorage.getItem("presetsArr") || localStorage.getItem("presetsArr").length < 0) {
init();
} else {
initIfLocalStorage();
}
function initIfLocalStorage() {
presetsArr = JSON.parse(localStorage.getItem('presetsArr'));
for (var i = 0; i < presetsArr.length; i++) {
if (presetsArr[i].freq) {
osc.frequency.value = presetsArr[i].freq;
freqSlider.value = presetsArr[i].freq;
freqDisplay.innerHTML = freqSlider.value;
}
if (presetsArr[i].detune) {
osc.detune.value = presetsArr[i].detune;
detuneSlider.value = presetsArr[i].detune;
detuneDisplay.innerHTML = detuneSlider.value;
}
if (presetsArr[i].gain) {
volume.gain.value = presetsArr[i].gain;
}
}
freqSlider.addEventListener("click", function(e) {
osc.frequency.value = this.value;
freqDisplay.innerHTML = this.value;
bookmark["freq"] = osc.frequency.value;
presetsArr.push(bookmark);
presetsArr = localStorage.setItem("presetsArr", JSON.stringify(presetsArr)) || [];
})
detuneSlider.addEventListener("click", function(e) {
osc.detune.value = this.value;
detune.innerHTML = this.value;
bookmark["detune"] = osc.detune.value;
presetsArr.push(bookmark);
presetsArr = localStorage.setItem("presetsArr", JSON.stringify(presetsArr)) || [];
})
Voici ce que je veux dire: Première session, j'ai changé les valeurs de fréquence et Detune, ils se sont stockés dans le tableau. Maintenant, après l'actualisation dans la deuxième session, j'ai changé à nouveau la valeur de detune et le tableau localStorage entier a été écrasé. Maintenant, la touche de fréquence est parti et seulement désaccorder à gauche. Donc après l'actualisation la prochaine fois que je veux jouer mon oscillateur, je n'obtiendrai aucun son, parce que la valeur de fréquence dans le tableau a été enlevée.
Quelle est votre 'init()'? que conditionnel à la première ligne est bizarre avec le comparateur '<0' - cela sera toujours faux. – jdubjdub
[.setItem()] (https://developer.mozilla.org/en-US/docs/Web/API/Storage/setItem#Return_value) ne renvoie pas de valeur. Ainsi, dans vos gestionnaires de clic, vous allez toujours configurer 'presetsArr' sur un tableau vide. Il suffit de faire l'appel setItem, pas besoin de faire une nouvelle assignation à presetsArr –
@PatrickEvans J'ai supprimé les assignations des gestionnaires de clic et maintenant chaque fois que je change d'entrée, j'obtiens plusieurs tableaux de f.e "Fréquence". Ce n'est pas mauvais, mais malheureusement après la mise à jour si je change à nouveau l'entrée, tout disparaît à nouveau. – Limpuls