2012-07-10 71 views
1

我有一些数据存储在localStorage中,我想动态输出这些数据(当“之前”和“之后”箭头被点击时)。我将页面重定向到自己&使文档准备就绪时显示当天的名字。计数器递减错误

当我点击下一步,日期正确增加,但是当我点击之前,一天不正确递减,我试图处理的情况下(如果计数器= -1,计数器= maxcounter)但它didn'将不起作用... 这是我的尝试:

的Javascript:

function GetCurrentDay() { 
    if (localStorage["CurrentDay"] == null || localStorage["CurrentDay"] == 'NaN' || localStorage["CurrentDay"]=="undefined") { 
     localStorage["Counter"]= 0; 
     i = localStorage["Counter"]; 
     localStorage["CurrentDay"] = localStorage["Day" + i]; 
    } 
    return localStorage["CurrentDay"]; 
} 
function GoToNextDay() { 
    var d = GetCurrentDay(); 
    i = localStorage["Counter"]; 
    i = i*1 + 1; 
    localStorage["Counter"] = i; 
    if(i!= localStorage["SchoolDays"]+1){ 
     localStorage["CurrentDay"] = localStorage["Day" + i]; 
    }else{ 
     localStorage["CurrentDay"] = localStorage["Day" + 0];  
    } 
    return true; 
} 
function GoToPrevDay() { 
    var d = GetCurrentDay(); 
    i = localStorage["Counter"]; 
    i = i*1 - 1; 
    localStorage["Counter"]=i; 
    if(i>0){ 
     localStorage["CurrentDay"] = localStorage["Day" + i]; 
    }else{ 
     i=localStorage["SchoolDays"]; 
     localStorage["Counter"]=i; 
     localStorage["CurrentDay"] = localStorage["Day" + i];  
    } 
    return true; 
} 

你对我怎么能解决这个问题的任何想法?

+0

你喜欢分配太多,重新分配所有内容 – Alexander 2012-07-10 16:24:07

+0

你已经评论过'CurrentDay'用'CurrentDate'替换它。你确定这就是你想要的吗? – pimvdb 2012-07-10 17:16:28

+0

请勿将所有内容存储在localStorage中。特别是在处理数据时,首先加载,然后更改,最后将其存储 - 不是一次一次。 – Bergi 2012-07-10 17:17:09

回答

1

我不太确定我明白你为什么需要本地存储来显示和增加一天。没有关于你期望什么行为的更多信息,很难给出充分知情的答案。首先,正如Bergi在评论中所建议的那样,您滥用本地存储。

例如,而不是:

function GetCurrentDay() { 
    if (localStorage["CurrentDay"] == null || localStorage["CurrentDay"] == 'NaN' || localStorage["CurrentDay"]=="undefined") { 
     localStorage["Counter"]= 0; 
     i = localStorage["Counter"]; 
     localStorage["CurrentDay"] = localStorage["Day" + i]; 
    } 
    return localStorage["CurrentDay"]; 
} 

你可以这样做:

function GetCurrentDay() { 
    var currentDay = localStorage.CurrentDay; 
    if (!currentDay) { 
     var counter = 0; 
     currentDay = localStorage["Day" + counter]; 
    } 
    localStorage.Counter = counter; 
    localStorage.CurrentDay = currentDay; 

    return currentDay; 
} 

上述方法要好得多,因为当你需要获取或设置一定的值,你只能访问localStorage的。这两者之间的任何事情都会发生在本地变量上,速度会更快。另外,如果可能的话,你应该使用点符号来访问javascript对象。这只是更多的可读性。

现在回到基本问题。你确定你需要localStorage吗?这听起来像你正在重新加载页面,并使用localStorage来跟踪某些值。如果您避免这种情况并动态更新这一天的字段,对于您和您的访问者来说,这将变得容易得多。例如,假设你有一个HTML的结构是这样的地方在您的网页:

<div id="day">0</div> 
<span id="next">Next</span> 
<span id="previous">Previous</span> 

你可以听单击事件并相应更新。

var day = 0, 
    dayEl = document.getElementById('day'); 

document.getElementById('next').onclick = function() { 
    dayEl.firstChild.nodeValue = ++day; 
} 

document.getElementById('previous').onclick = function() { 
    dayEl.firstChild.nodeValue = --day; 
} 

不需要localStorage,也不需要重新加载页面。上面的例子非常简单,但我希望它能够得到重点,并帮助您重新考虑您的方法。