Как правильно загрузить плагин fullcalendar jQuery в скрытом div

Я использую вкладки инструментов jQuery для разделения моей страницы на вкладки. Один из этих вкладок содержит jQuery Fullcalendar. Поскольку я загружаю JavaScript на странице на скорости и избегаю вспышки неравномерного содержимого, я скрываю первоначально невидимые вкладки, используя display: none. При этом полный календар не отображается должным образом. Он показывает правильные кнопки, но пока я не нажимаю кнопку "Сегодня", календарь не отображается. Если я разрешаю его визуализировать в видимый div, он отображается правильно.

Я могу обойти это, используя события выбора табуляции для рендеринга календаря или перемещения сценариев календаря и вкладок в голову, но я предпочел бы, если бы было более подходящее решение.

Ответы

Ответ 1

Что вам нужно сделать, это загрузить данные после щелчка ссылки, но не полностью уверен, но я думаю, что проблема в том, что высота не установлена ​​правильно после загрузки данных, поэтому она отображает только верхнюю часть.

Что я сделал и работал у меня.

$(document).ready(function() {
    $("#calendareventlink").click ( function(){
      loadCalendar();
    });
});
function loadCalendar(){
  //Do your data loading here
}

<a href="" id="calendareventlink">View Calendar</a>

Ответ 2

Когда div скрыт, fullCalendar не знает, какой размер он должен отображать, поэтому вам просто нужно вызвать функцию render после того, как вы узнаете, что div виден.

Прикрепите его к событию show или что-то еще:

$('#calendar').fullCalendar('render');

Ответ 3

вы должны использовать javascript для установки отображения none fullcalendar

что-то вроде этого:

                document.getElementById("test").style.display="none";

тогда он выглядит так:

<html>
<head>
    <link rel='stylesheet' type='text/css' href='bigcalendar.css' />
    <script type='text/javascript' src='jquery-1.8.1.min.js'></script>
    <script type='text/javascript' src='bigcalendar.js'></script>   

    <script type='text/javascript'>


        $(document).ready(function() {

            $('#bigCalendar').fullCalendar({
                header: {
                    left: 'prev,next today',
                    center: 'title',
                    right: 'month,agendaWeek,agendaDay'
                },
                editable: false,
                events: [{"id":111,"title":"Event1","start":"2012-11-10","url":"http:\/\/yahoo.com\/"},{"id":222,"title":"Event2","start":"2012-11-20","end":"2012-11-22","url":"http:\/\/yahoo.com\/"}]
            });

            document.getElementById("test").style.display="none";
        });





        function closeEventDetails(){

            $("#test").hide("fast");
        }



        function showBigCalendar(){

            $("#test").show("fast");

            //                $('#bigCalendar').fullCalendar( 'render' )

        }



        $(document).ready(function() {
        });

    </script>

    <style type='text/css'>

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

        #bigcalendar {
            width: 900px;
            margin: 0 auto;
        }

    </style>

</head>
<body>


    <!--zobrazenie velkeho kalendara-->

    <button onclick="showBigCalendar();"  >open</button>
    <button  onclick="closeEventDetails();">close</button>

    <div id="test" ><div id="bigCalendar" ></div></div>


</body>

Ответ 4

Когда вы нажимаете на вкладку, вызовите что-то вроде этого:

$('#calendar').fullCalendar('render'); // Force the calendar to render

Ответ 5

У меня возникли проблемы с нажатием кнопки "Сегодня", чтобы календарь появился на вкладке jQueryUI. Я смог полностью решить проблему, инициализируя вкладки ПОСЛЕ того, как я инициализировал календарь. Я, однако, делаю это в начале документа и называя все остальные js незадолго до закрытия тега тела. Надеюсь, это поможет.

Ответ 6

Вы также можете вызвать .resize() для любого элемента parent/ancestor в календаре - когда вы знаете, что календарь виден;)

Ответ 7

Я знаю, что этот вопрос древний, но он вышел первым, когда я искал решение той же проблемы. По какой-то причине предлагаемое решение с render не работает в некоторых конкретных случаях (если на неактивной вкладке загружены записи календаря), поэтому мне пришлось refetchEvents.

Код выглядит следующим образом:

$('#calendar').fullCalendar('render');
$('#calendar').fullCalendar('refetchEvents');

Ответ 8

Вы пробовали отображение: скрыто вместо отображения: none?

Не знаю, будет ли это работать, но что-то стоит попробовать.