【问题标题】:How to add jQuery if statement inside a set of plugin options?如何在一组插件选项中添加 jQuery if 语句?
【发布时间】:2015-04-30 01:12:26
【问题描述】:

我正在尝试让日历插件 (FullCalendar) 显示不同的天数,具体取决于用户是在移动设备、平板电脑还是桌面断点上查看网站。为此,我需要日历在桌面上显示正常的一周,在移动设备上显示 3 天。像普通插件一样,你初始化元素并传递一些选项。我已经尝试了几件事。

工作代码如下:

$('#calendar').fullCalendar({
        timeFormat:'h(:mm)a',
        header:{
            left:'prev',
            center:'title',
            right:'next'
        },
        height: 650,
        views: {
            basicThreeDay: {
                type: 'basic',
                duration: { days: 3 },
                buttonText: '3 day'
            },
        },
        defaultView: 'basicThreeDay',
        titleFormat: {
            week: 'MMMM YYYY'
        },
        columnFormat: {
            week: 'dddd M/D',
            day: 'ddd M/D'
        },

此代码将以 3 天的视图显示日历。这对移动设备很好,但当我想显示一整周时,会在桌面上显示 3 天。这基本上就是我想要做的:

$('#calendar').fullCalendar({
        timeFormat:'h(:mm)a',
        header:{
            left:'prev',
            center:'title',
            right:'next'
        },
        height: 650,
        if ($(window).width() <= 481){
            views: {
                basicThreeDay: {
                    type: 'basic',
                    duration: { days: 3 },
                    buttonText: '3 day'
                },
            },
            defaultView: 'basicThreeDay',
        } else {
            defaultView: 'basicWeek',
        }
        titleFormat: {
            week: 'MMMM YYYY'
        },
        columnFormat: {
            week: 'dddd M/D',
            day: 'ddd M/D'
        },

我可以将整个函数包装在 if 语句中,但是,在我复制到这里之后,整个函数还在继续。至少 200 行代码,我不想复制所有代码只是为了获得一个单一的更改。无论如何,我可以根据窗口大小更改选项?

我也尝试在上述函数中将 defaultView 设置为 basicWeek,然后在关闭后添加:

if (jQuery(window).width() <= 481) {
        jQuery('#hp-availability-calendar').fullCalendar({
            views: {
                basicThreeDay: {
                    type: 'basic',
                    duration: { days: 3 },
                    buttonText: '3 day'
                },
            },
            defaultView: 'basicThreeDay'
        });
    };

这也不行。

【问题讨论】:

  • 为什么不使用 if/else 将值分配给变量,然后将 defaultView 设置为变量而不是硬编码文本?

标签: javascript jquery fullcalendar


【解决方案1】:

您可以创建通用设置对象,然后根据您的条件添加其他变量。像这样的:

var calendar = {
    timeFormat:'h(:mm)a',
    header:{
        left:'prev',
        center:'title',
        right:'next'
    },
    height: 650,
    titleFormat: {
        week: 'MMMM YYYY'
    },
    columnFormat: {
        week: 'dddd M/D',
        day: 'ddd M/D'
    }
};

if ($(window).width() <= 481){
    calendar.views = {
        basicThreeDay: {
            type: 'basic',
            duration: {
                days: 3
            },
            buttonText: '3 day'
        }
    };
    calendar.defaultView = 'basicThreeDay',
} else {
    calendar.defaultView = 'basicWeek',
}

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

【讨论】:

  • jQuery 中还有一个名为http://api.jquery.com/jquery.extend/ 的方法可以帮助保持代码清晰易读。
【解决方案2】:

您可以创建一个“视图”变量并像这样在准备好的文档上设置“basicThreeDay”或“basicWeek”

var view="basicWeek";//default to basicWeek
if ($(window).width() <= 481){//for mobile
    view='basicThreeDay';
}
$('#calendar').fullCalendar({
    timeFormat:'h(:mm)a',
    header:{
        left:'prev',
        center:'title',
        right:'next'
    },
    height: 650,
    views: {
        basicThreeDay: {
            type: 'basic',
            duration: { days: 3 },
            buttonText: '3 day'
        },
    },
    defaultView:  view,//will be "basicWeek" on (width>481) and "basicThreeDay" for (width<=481)
    titleFormat: {
        week: 'MMMM YYYY'
    },
    columnFormat: {
        week: 'dddd M/D',
        day: 'ddd M/D'
    }
});    

或者你可以用你的 if 语句在 defaultView 中创建一个函数并像这样返回正确的字符串

$('#calendar').fullCalendar({
    timeFormat:'h(:mm)a',
    header:{
        left:'prev',
        center:'title',
        right:'next'
    },
    height: 650,
    views: {
        basicThreeDay: {
            type: 'basic',
            duration: { days: 3 },
            buttonText: '3 day'
        },
    },
    defaultView: function(){
        if ($(window).width() <= 481){
             return 'basicThreeDay';
        } else {
            return 'basicWeek';
        }
    }(),//you need to call the function  
    titleFormat: {
        week: 'MMMM YYYY'
    },
    columnFormat: {
        week: 'dddd M/D',
        day: 'ddd M/D'
    }
});    

如果您设置“basicThreeDay”视图而不考虑窗口宽度,您可以像这样在视图之间进行更改

$(window).resize(function(){
    if ($(window).width() <= 481){
        $('#calendar').fullCalendar( 'changeView', 'basicThreeDay' );
    }
    else{
        $('#calendar').fullCalendar( 'changeView', 'basicWeek' );
    }
});

https://jsfiddle.net/f28ojwx9/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    相关资源
    最近更新 更多