FullCalendar - 如何禁用prev按钮

时间:2010-08-31 22:14:41

标签: jquery fullcalendar

当前一个月小于当月时,如何禁用上一步按钮?

例如,如果当前月份是8月,那么我想禁用上个月按钮,以便您看不到7月份。

6 个答案:

答案 0 :(得分:4)

代码检查fc-state-disabled或ui-state-disabled,因此不需要删除按钮。

viewRender: function( view, element ) {
    // Drop the second param ('day') if you want to be more specific
    if(moment().isAfter(view.intervalStart, 'day')) {
        $('.fc-prev-button').addClass('fc-state-disabled');
    } else {
        $('.fc-prev-button').removeClass('fc-state-disabled');
    }
}

答案 1 :(得分:2)

您可以自己轻松完成此操作,这是一个有效的示例。

我通过更改fullcalendar.js来完成此操作。请注意,在许多示例中,您可以使用上一个/下一个按钮更改年,月和日。它们中的每一个都有自己的渲染功能,因此如果你想要它们中的每一个,都需要考虑这一点。我的例子很容易适应。

在我的例子中,当“禁用”时,我也将前一个按钮设置为红色。你可以自己决定如何处理这个问题。

views.month = function(element, options, viewName) {
    return new Grid(element, options, {
        render: function(date, delta) {
            if (delta == -1) {
                var curr_date = new Date();
                var curr_m = curr_date.getMonth();
                if (date.getMonth() < curr_m) {
                    return false;
                } else if ((date.getMonth() - 1) < curr_m) {
                    $(".fc-button-prev span").css("background", "red");
                } else {
                    $(".fc-button-prev span").css("background", "#E8E8E8");
                }               
            } else {
                $(".fc-button-prev span").css("background", "#E8E8E8");
            }

这从fullcalendar.js中的第944行开始

我在Firefox 3.6.8中使用下载FullCalendar时提供的basic-view.html和default.html示例对此进行了测试。只需更改:

<script type='text/javascript' src='../fullcalendar.min.js'></script>

<script type='text/javascript' src='../fullcalendar.js'></script>

答案 2 :(得分:2)

对于任何不想修改fullcalendar.js的人,因为这会使更新复杂化:

  // On load
  $jQ(document).ready(function() {
    // initialize calendar first
    updateCalendar();
  }

  // Update the calendar when previous button is pressed
  $jQ('#calendar .fc-button-prev .fc-button-inner').live('click', function(){
    updateCalendar();
  })

  // Update the calendar when next button is pressed
  $jQ('#calendar .fc-button-next .fc-button-inner').live('click', function(){
    updateCalendar();
  })

  // Update the calendar when the today button is pressed
  $jQ('#calendar .fc-button-today .fc-button-inner').live('click', function(){
    updateCalendar();
  })


  function updateCalendar(){
    var dateObj=$jQ('#calendar').fullCalendar('getDate')
    var month=dateObj.getMonth()+1;
    var year=dateObj.getFullYear();
    var today_month=<%= Date.today.month %>
    var today_year=<%= Date.today.year %>

    // Disable prev button for the past
    if (today_year==year && today_month==month){
      $jQ("#calendar .fc-button-prev").css("display", "none");
    }
    else{
      $jQ("#calendar .fc-button-prev").css("display", "");
    }
    // Disable next button for date.now + 1.year
    if (today_year+1==year && today_month-1==month){
      $jQ("#calendar .fc-button-next").css("display", "none");
    }
    else{
      $jQ("#calendar .fc-button-next").css("display", "");
    }
  }

注1:我更喜欢从rails而不是Jquery获取当前日期,因为我更喜欢使用服务器时间,因为我的应用程序未在全球范围内使用,而且我没有时间反正。

注2:我使用$ jQ作为jQuery.noConflict(),如果你不只是搜索并用$ jQ代替$。

答案 3 :(得分:2)

viewDisplay: function getDate(date) {
                var lammCurrentDate = new Date();
                var lammMinDate = new Date(lammCurrentDate.getFullYear(), lammCurrentDate.getMonth(), 1, 0, 0, 0, 0);

                if (date.start <= lammMinDate) {
                    $(".fc-button-prev").css("display", "none");
                }
                else {
                    $(".fc-button-prev").css("display", "inline-block");
                }
            }

答案 4 :(得分:1)

更新版本:

    viewRender: function (view,element) {

            if (moment() >= view.start && moment() <= view.end) {
                $(".fc-prev-button").prop('disabled', true); 
                $(".fc-prev-button").addClass('fc-state-disabled'); 
            }
            else {
                $(".fc-prev-button").removeClass('fc-state-disabled'); 
                $(".fc-prev-button").prop('disabled', false); 
            }
        }

答案 5 :(得分:0)

我无法在SanRyu上面发布的代码中添加注释,但是在ignoreWindowResize--之前它应该放在renderView函数中(版本1.5.4中的第368行)。接近函数的末尾。

var lammCurrentDate = new Date();
var lammMinDate = new Date( lammCurrentDate.getFullYear(), lammCurrentDate.getMonth(), 1, 0, 0, 0, 0);
if (currentView.start <= lammMinDate){
    header.disableButton('prev');
} else {
    header.enableButton('prev');
}