2016-07-04 4 views
2

정보 (시험 정보)가 배열에 저장되고 localstorage를 사용하여 다른 js로 전달되는 모듈을 만듭니다. 내가 얻는 문제는 이전 시험이 .push를 사용하고 있어도 항상 덮어 씁니다. 모든 변수는 다른 곳에서 정의됩니다. 도와 주셔서 감사합니다. 그렇지 않으면 항상 & 이전에 저장 한 새로운 배열 될 것배열에 객체를 푸시 할 때 발생하는 문제 CSS | JS | HTML

recentexamdb = [] 
document.getElementById("button1").onclick = function() { 
    window.scrollTo(0, 0); 
    document.getElementById("maindiv").style.visibility = "hidden"; 
    document.getElementById("buttondiv").style.visibility = "hidden"; 
    document.getElementById("countdown").style.visibility= "visible"; 
    var yearinput = document.getElementById("yearinput").value; 
    var minuteinput = document.getElementById("minuteinput").value; 
    var hourinput = document.getElementById("hourinput").value; 
    var secondinput = document.getElementById("secondinput").value; 
    var twentyminutes = new Audio('20mins.mp3'); 
    var tenminutes = new Audio('10mins.mp3'); 
    var fiveminutes = new Audio('5mins.mp3'); 
    var timesup = new Audio('timesup.mp3'); 
    var firstalert = document.getElementById("firstalertinput").value; 
    var secondalert = document.getElementById("secondalertinput").value; 
    var thirdalert = document.getElementById("thirdalertinput").value; 
    var readingalert = document.getElementById("readingalertinput").value; 
    var timetotal = (Number(hourinput)*60) + Number(minuteinput) 
    enddate = (new Date().getTime()) + (minuteinput*60000) +(secondinput*1000) + (hourinput*3600000); 
    var examtypeinput = document.getElementById("examtypeinput").value; 
    var hours=0; 
    var minutes=0; 
    var seconds=0; 
    var countdown = document.getElementById("countdown"); 
    var examtype = document.getElementById("examtype"); 

setInterval(function() { 
     var currentdate = new Date().getTime(); 
     var secondsleft = (enddate - currentdate)/1000; 
     // do some time calculations 
     hours = parseInt(secondsleft/3600); 
     secondsleft = secondsleft % 3600; 
     minutes = parseInt(secondsleft/60); 
     seconds = parseInt(secondsleft % 60); 
     if (hours == 0 && minutes == 0 && seconds == 0) { 
      document.getElementById("countdowndiv").style.fontFamily = "Helvetica Neue, Arial, sans-serif" 
      document.getElementById("countdowndiv").style.fontSize = "100%" 
      countdown.innerHTML = "Time is up! Pens down and wait for further instruction" 
      examtype.innerHTML = "If you continue to write, marks may be deducted" 
      var readingtimenow = "No reading time selected" 
      var timetotalnow = ((hours * 60) + minutes) 
      var examinfoobject = { 
      year: yearinput, 
      examtime: timetotalnow, 
      timeofexam: Date(), 
      examtype: examtypeinput, 
      readingtime: readingtimenow 
      } 
      recentexamdb.push(examinfoobject) 
      console.log(recentexamdb) 
      localStorage.setItem("storedexamdb", JSON.stringify(recentexamdb)) 
     } 
}, 1000); 
} 
+0

전체 관련 코드를 제공해주십시오. –

+0

recentexamdb를 배열로 선언 했습니까? – rrd

+0

나머지 코드 – maxphat

답변

0

JS 특정 구문을 수정, (지적 주셔서 감사합니다) 먼저 로컬 저장소에서 기존 값에서 "recentexamdb을"초기화 : 여기에 코드입니다 값이 손실 될 수 있습니다.

recentexamdb=JSON.parse(localStorage.getItem("storedexamdb")); // read already saved values 
recentexamdb.push(examinfoobject); 
localStorage.setItem("storedexamdb",JSON.stringify(recentexamdb)); 

다음 페이지에서 이 도움이 되었기를 바랍니다.

+0

왜 답을 제공합니까? 그것은 자바 스크립트 질문 –

+0

작동하지 않는 것 같습니다. examinfoobject 뒤에 명시된 것처럼 추가하고 프로젝트의 시작 부분에 변수를 선언했습니다. 이 오류가 발생합니다 : timermodule.js : 319 Uncaught TypeError : null의 'push'속성을 읽을 수 없습니다. 319 행은 recentexamdb.push (examinfoobject)에있었습니다. – maxphat

0

아라티의 답변으로 인해 수정되었습니다. 그것은 localstorage clickcounter를 설정하고 clickcounter가 1보다 큰 경우 이미 저장된 값을 사용했을 때 작동했습니다.

관련 문제