我有一个显示当前月份的Chrome日历应用。我还有下个月和上个月的按钮,这些按钮将在下个月和上个月显示,具体取决于显示的月份。但是,我只希望日历可以到当年的12月和当年的1月,所以在用户点击12月/ 1月后,我删除了事件处理程序。但是,当它不是12月或1月时,我需要再次添加事件处理程序。我该怎么做?
var count = 0;
var updated = setInterval(function() {
var v = document.getElementById("CalendarMonth").innerHTML;
updatedMonth = months.indexOf(v);
}, 1000);
document.getElementById("nextMonth").addEventListener("click", nxtMonth);
function nxtMonth()
{
count = count +1;
if(nextMonth == 11)
{
console.log("the year has ended!");
document.getElementById("nextMonth").removeEventListener("click", nxtMonth);
}
else
{
nextMonth = updated + count;
//ideally, this would work. But for some reason it does not
document.getElementById("nextMonth").addEventListener("click", nxtMonth);
}
document.getElementById("previousMonth").addEventListener("click", prevMonth);
function prevMonth()
{
count = count -1;
if(previousMonth == -1)
{
console.log("the year has just started!");
document.getElementById("previousMonth").removeEventListener("click", prevMonth);
}
else if(count==-1)
{
previousMonth =1;
}
else
{
previousMonth = updated + count;
document.getElementById("previousMonth").addEventListener("click", prevMonth);
}
答案 0 :(得分:0)
我认为更简单的方法是不删除点击监听器,而只是在递增/递减当前月份之前立即返回。
例如,下个月的处理程序将是:
if (nextMonth == 11) {
return;
}
count++;
答案 1 :(得分:0)
从可用性的角度来看,一个简单而优雅的解决方案就是添加另一个事件处理程序,每个处理器用于下个月"和"前几个月"按钮可在达到其中一个限制时停用它们。通过这种方式,浏览器将为您完成工作(它不允许用户点击它们),用户也将获得他们已达到限制的视觉反馈。
function checkMonth(currentMonth)
{
if(currentMonth == 12){
document.getElementById("nextMonth").disabled = true;
} else {
document.getElementById("nextMonth").disabled = false;
}
if(currentMonth == 1){
document.getElementById("previousMonth").disabled = true;
} else {
document.getElementById("previousMonth").disabled = false;
}
}
只需在现有的事件处理程序中为这两个按钮调用此函数。
我没有检查过这个功能,也许你甚至可以稍微优化一下,但这是我的方法。