2016-11-14 3 views
0
function book() 
{<br/> 
    var name=document.getElementById('name').value; 
    <br/>var date=document.getElementById('date').value; 
    <br/>var venue=document.getElementById('venue').value; 
    <br>var time=document.getElementById('time').value; 

<br/> var reserve=[]; 
<br/> 
var input={ 
      >> name:' ',<br/> 
      date:' ',<br/> 
      venue:' ',<br/> 
      time:' '<br/> 
     }; 


     //load local storage 
     reserve = localStorage.getItem("arrayCache"); 
     reserve = JSON.parse(reserve); 
     if(reserve === null || reserve === undefined)//run for the first time 
     { 

       input={ name:name, 
         date:date, 
         venue:venue, 
         time:venue 
         }; 
       input=JSON.stringify(input); 
       alert(input); 

       reserve.push(input); 
       localStorage.setItem("arrayCache",JSON.stringify(reserve)); 
       alert("Data successfully stored."); 
     } 
     //when array already store data 
     else 
     { 
       for(var x=0; x<reserve.length;x++) 
        { 
          if(date==reserve[x].date && venue==reserve[x].venue && time==reserve[x].time) 
           { 
            alert("Date and time not available for that venue!"); 
            break; 
           } 
          else 
           { 

            input={ name:name, 
              date:date, 
              venue:venue, 
              time:venue 
              }; 
            input=JSON.stringify(input); 
            alert(input); 
            reserve.push(input); 

            localStorage.setItem("arrayCache",JSON.stringify(reserve)); 
            alert("Data successfully stored."); 
            break; 
           } 
        } 
     } 

}Speicherobjekt mit Attributen in Array javascript

Mein Problem ist, dass, wenn ich versuchte,

input={ name:name, 
     date:date, 
     venue:venue, 
     time:venue 
     }; 

in Array zu speichern Objekt reserve[] mit reserve.push(input) es einen Fehler veranlassen zu sagen, dass „Can not lesen property 'push' von null ", Aber wenn ich versuchte alert(input), drucken Sie das ganze Objekt schön, ich weiß nicht, wo das Problem ist. Meine erwartete Ausgabe etwas so sein würde:

reserve(0)={name:name, 
      date:date, 
      venue:venue, 
      time:time} 

so dass später kann ich für neue Benutzereingabe vergleichen und überprüfen Sie mit reserve(0).name == name

+0

http://stackoverflow.com/editing-help – SLaks

+1

Sie müssen nur Ihr Array instanziiert ... – Alexis

+0

Überprüfen Sie, dass 'localStorage.getItem ("arrayCache"); 'gibt tatsächlich einen Wert zurück – Weedoze

Antwort

2

Sie müssen nur Ihre array instanziiert.

Ihr Fehler ist throw Ursache

reserve = localStorage.getItem("arrayCache"); 
reserve = JSON.parse(reserve); 

keine array zurückkehren, haben Sie vor push ein item zu testen.

Es funktioniert nach dem Instanziierung

var name ="name"; 
 
var date ="10/10/2016"; 
 
var type="text"; 
 
var reserve; 
 

 
var input = { 
 
    name:name, 
 
    date:date, 
 
    type:type 
 
}; 
 

 
//Test if array exist and if it's an array 
 
reserve = (typeof x != 'undefined' && reserve instanceof Array) ? reserve : [] 
 

 
reserve.push(input); 
 

 
console.log(reserve)

+0

Beachten Sie, dass dies höchstwahrscheinlich im Körper des' if' geschieht. Das OP prüft, ob 'reserve' 'null' oder 'undefiniert' ist, versucht dann aber, dorthin zu gelangen. – Gavin

+0

Ja, deshalb muss er das Array instanziieren, wenn dieser Fehler auftritt. Ich werde bearbeiten – Alexis

+0

wollte nur klären. Ich bin mir nicht sicher, ob das OP versteht, WARUM er es instanziieren muss. – Gavin

Verwandte Themen