2017-03-18 2 views
1

私は、クリックすると、jquery fullcalendarにeventSourceを追加する複数のチェックボックスがあります。ページを更新すると、ストレージからチェックボックスの値を取得できますが、イベントソースは追加されません。チェックボックスをオフにして、チェックボックスを再チェックする必要があります。機能を実行するwebstorageのチェックボックスの値

ここでは、個別のチェックボックスをクリックする機能があります。ここ

$("#checkbox1").change(function() { 
    if (this.checked) { 
     $('#calendar').fullCalendar('addEventSource', 'EventListRed.php'); 
    } else { 
     $('#calendar').fullCalendar('removeEventSource', 'EventListRed.php'); 
    } 
}); 

とは、私は、チェックボックスを保つためにウェブストレージを使用する方法である値

$(document).ready(function() { 
    var boxes = document.querySelectorAll("input[type='checkbox']"); 
    for (var i = 0; i < boxes.length; i++) { 
     var box = boxes[i]; 
     if (box.hasAttribute("store")) { 
      setupBox(box); 
     } 
    } 

    function setupBox(box) { 
     var storageId = box.getAttribute("store"); 
     var oldVal = localStorage.getItem(storageId); 
     box.checked = oldVal === "true" ? true : false; 
     box.addEventListener("change", function() { 
      localStorage.setItem(storageId, this.checked); 
     }); 
    } 
}); 

EDIT:要求されたとして

私はJSFiddle demoを追加しました。 チェックボックスの値は保存されていますが、私のイベントはEventsListRed.phpから読み込まれません。

jsfiddleで.phpファイルをリンクする方法がわかりません。

私の問題はチェックボックスにチェックマークを付けることですが、変更機能をトリガーしていないと思います。

+0

のための公式ドキュメントを参照してくださいあなたは[JsFiddleデモ](https://jsfiddle.net/)を提供してくださいすることができ – Himanshu

+0

JSFiddleが追加されました。編集をご覧ください。 – PurpleHelmet

答えて

1

このチェックボックスがオンになっていることを確認する前に.fullCalendar( 'refetchEvents')を呼び出す必要があります。

refetchEvents

function setupBox(box) { 
    var storageId = box.getAttribute("store"); 
    var oldVal = localStorage.getItem(storageId); 
    $(box).on("change", function() { 
     localStorage.setItem(storageId, this.checked); 
    }); 
    box.checked = oldVal === "true" ? true : false; 
    $('#calendar').fullCalendar('refetchEvents'); 
    if (box.checked) { 
     $(box).trigger('change'); 

    } 

    } 
1

達成したいことを得ることができましたが、ハックのようです。 JsFiddle Demo

HTML

<input type="checkbox" id="cbRed" store="checkbox3" class="chk" /> 
<label for="cbRed">Red</label> 
<div id='calendar'></div> 

CSS

body { 
    margin-top: 40px; 
    text-align: center; 
    font-size: 14px; 
    font-family: "Lucida Grande", Helvetica, Arial, Verdana, sans-serif; 
} 

#calendar { 
    width: 600px; 
    margin: 0 auto; 
} 

を参照してくださいJS

$(document).ready(function() { 

    var calendar = $('#calendar').fullCalendar({ 
    header: { 
     left: 'prev,next today', 
     center: 'title', 
     right: 'month,agendaWeek,agendaDay' 
    }, 


    }); 

    //Checkbox removing/adding red events 
    $("#cbRed").change(function() { 
    if (this.checked) { 
     $('#calendar').fullCalendar('addEventSource', 'EventListRed.php'); 
    } else { 
     $('#calendar').fullCalendar('removeEventSource', 'EventListRed.php'); 
    } 

    }); 

}); 

$(document).ready(function() { 
    var boxes = document.querySelectorAll("input[type='checkbox']"); 

    for (var i = 0; i < boxes.length; i++) { 
    var box = boxes[i]; 
    if (box.hasAttribute("store")) { 
     setupBox(box); 
    } 
    } 

    function setupBox(box) { 
    var storageId = box.getAttribute("store"); 
    var oldVal = localStorage.getItem(storageId); 
    $(box).on("change", function() { 
     localStorage.setItem(storageId, this.checked); 
    }); 
    box.checked = oldVal === "true" ? true : false; 
    if (box.checked) { 
     $(box).trigger('change'); 
    } 
    } 

}); 
+0

コンソールで、PHPコールが起動されたことを確認できます。 JsFiddleにサーバー側の言語コードをロードする方法はありません。 – Himanshu

+0

助けてくれてありがとう。奇妙なことに私はリフレッシュのためにイベントを表示していませんが、前回または次の日に移動するとロードされます。ページが更新されたときにカレンダーを更新する必要があるようです。私は変更をトリガした後で、ページリフレッシュ後すぐには表示されないまま.fullCalendar( 'rerenderEvents')と.fullCalendar( 'refetchEvents')を追加しようとしました。 – PurpleHelmet

関連する問題