2014-09-16 4 views
0

travail par .cliquez pour sauver dans localStorage:onchange pour créer la fonction de sauvegarde automatique (javascript) ne fonctionne pas

$("check").onclick = function(){ 
    parkArray = [check1,check2,check3,check4,check5]; 
    localStorage.removeItem ("saveArray");  
    localStorage.setItem("saveArray",JSON.stringify(parkArray)); 

N'a pas travaillé par onchange à autosave dans localStorage

parkArray = [check1,check2,check3,check4,check5]; 
    parkArray.onchange = function() { 
    localStorage.removeItem ("saveArray");  
    localStorage.setItem("saveArray",JSON.stringify(parkArray)); 

Quelqu'un peut-il donner des conseils sur la façon de résoudre ce problème si je veux que le système sauvegarde automatiquement les données quand il est changé? Merci.

lien d'origine: https://github.com/erictsaiweb/card-parking/blob/master/cardpark.js

+0

Est-il acceptable pour vous d'utiliser par exemple AngularJS? ou vous avez limité avec JS simple? – Lugaru

+0

Merci Lugaru. Je suis ouvert à utiliser tout type de cadre si cela aide. –

+0

Dans ce cas, utilisez AngularJS et vous pouvez utiliser un personnel tel que $ watch ou ngChange pour surveiller dynamiquement les changements sans code supplémentaire. – Lugaru

Répondre

0

Vous devez travailler avec une fonction de rappel.

// initalize 
var parkArray = [check1,check2,check3,check4,check5]; 

// change 
changeParkArray([check4,check5,check6,check7,check8], onChangeParkArray); 

// change ahain 
changeParkArray([check9,check10,check12,check21,check100], onChangeParkArray); 


// the function who changes the array 
function changeParkArray(newValue, callback){ 
    parkArray = newValue; 
    callback(newValue); 
} 

// function to run after ParkArray is changed 
function onChangeParkArray(data){ 
    localStorage.removeItem ("saveArray");  
    localStorage.setItem("saveArray",JSON.stringify(data));  
} 
+0

Andreas, merci! Voulez-vous dire: changeParkArray ([new ck1, newck2, newck3, newck4, newck5] = fonction (données) { localStorage.removeItem ("saveArray"); localStorage.setItem ("saveArray", JSON.stringify (data)) ; }); –

+0

non, vous appelez la fonction avec 2 paramètres. Un pour la nouvelle valeur et une fonction que vous souhaitez exécuter lorsque la valeur est modifiée –

+0

a obtenu votre point. Vérifiez la nouvelle valeur si elle a changé, non? Je vous remercie! –

0

Vous ne pouvez pas utiliser la fonction onclick sur un objet jQuery car il est destiné à un objet JavaScript (par exemple document.getElementById('element').onclick....) il devrait être .click ou .on('click').

Et vous n'êtes pas cibler correctement votre élément, check ... Est-ce un class ou un id ...

Et onchange n'existe pas dans le prototype de tableau. Il est uniquement destiné à l'objet DOM comme input et select.

Ce que vous pouvez faire pour le tableau est de vérifier si le tableau parkArray est le même que celui de localStorage.

par exemple

$("#check").click(function(){ 
    var saveArray = (localStorage.saveArray != undefined) ? JSON.parse(localStorage.saveArray) : []; 
    parkArray = [check1,check2,check3,check4,check5]; 

    saveArray.forEach(function(v, i){ 
    if(parkArray.indexOf(v) < 0){ 
     localStorage.removeItem ("saveArray");  
     localStorage.setItem("saveArray",JSON.stringify(parkArray)); 
    } 
    }); 
}); 

+0

Xlander, merci pour vos commentaires. Laissez-moi travailler sur ça! –

+0

De rien. – Xlander

Questions connexes