[英]How to add an event listener, remove it, and add it again?
我有一個可以顯示當前月份的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);
}
好吧,我認為一種更簡單的方法是不刪除點擊監聽器,而是在增加/減少當前月份之前立即返回。
因此,例如下個月的處理程序將是:
if (nextMonth == 11) {
return;
}
count++;
從可用性的角度來看,一種簡單且更優雅的解決方案是僅添加另一個事件處理程序,對於每個“下個月”和“上個月”按鈕,在達到限制之一時將其停用。 這樣,瀏覽器將為您完成工作(不允許用戶單擊它們),並且用戶還將獲得視覺反饋,表明他們已達到極限。
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;
}
}
只需在您現有的兩個按鈕的事件處理程序中調用此函數即可。
我沒有檢查此功能,也許您甚至可以對其進行一點優化,但是這是我要的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.