【问题标题】:triggering a function before $("").datepicker()在 $("").datepicker() 之前触发一个函数
【发布时间】:2017-08-13 14:13:14
【问题描述】:

我在beforeShowDay 函数中有一个listeJNO 变量

$('#calendrier').datepicker({

                format: "dd/mm/yyyy",
                weekStart: 1,
                maxViewMode: 3,
                language: "fr",
                calendarWeeks: true,
                beforeShowDay: function (date) {

                    for (var i = 0; i < listeJNO.length; i++) {
                        console.log(date >= listeJNO[i].Begin && date <= listeJNO[i].End);
                        if (date >= listeJNO[i].Begin && date <= listeJNO[i].End) {

                            return {

                                classes: 'morning-ferie'
                            };
                        }
                    }
                }

但在此之前,我需要定义listeJNO。我有一个这样做的函数实际上是它的getListeJNO()。所以这是我的问题,无论我将getListeJNO() 用于在listeJNO 中初始化数据的位置,$('calendrier').datepicker({...}) 中的beforeShowDay 选项始终排在最前面,而listeJNO 内部没有数据

【问题讨论】:

    标签: javascript jquery datepicker


    【解决方案1】:

    一个选项是在 listeJNO 的加载完成时初始化日期选择器。 您可以通过返回一个承诺并在“then”回调中设置日期选择器来做到这一点。

    首先创建将数据加载到listeJNO中的promise

    var listeJNO;
    var loadListeJNOpromise = new Promise(
        function (resolve, reject) {
                //load the data into listeJNO, then send it in the resolve callback
                listeJNO = ....;
                
                resolve('Load completed'); // fulfilled
                
                //if something went wrong then reject it
                //reject('Didnt work..'); 
            }
        );
    

    然后像这样消费承诺

    //create a function thats sets the datepicker
    var initializeDatepicker = function(){
        $('#calendrier').datepicker({
            format: "dd/mm/yyyy",
            weekStart: 1,
            maxViewMode: 3,
            language: "fr",
            calendarWeeks: true,
            beforeShowDay: function (date) {
    
                for (var i = 0; i < listeJNO.length; i++) {
                    console.log(date >= listeJNO[i].Begin && date <= listeJNO[i].End);
                    if (date >= listeJNO[i].Begin && date <= listeJNO[i].End) {
    
                        return {
    
                            classes: 'morning-ferie'
                        };
                    }
                }
            }
    };
    
    //declare a function which invokes the datepicker function in the promise 
    var initialize = function () {
        loadListeJNOpromise
            .then(function (fulfilled) {
                console.log(fulfilled);
                //call the datepicker initialize here
                initializeDatepicker();
            })
            .catch(function (error) {
                console.log(error);
            });
    };
    //invoke the initilize
    initialize(); 
    

    【讨论】:

    • 非常感谢,它奏效了......另外,感谢您让我知道“Promise”
    【解决方案2】:

    您是否尝试在beforeShowDay 中设置变量?我认为这会奏效。将您的 listeJNO var 声明在 beforeShowDay 函数之外,然后将其设置在该函数中。像这样的:

     beforeShowDay: function (date) {
                   //Set your variable in this function
                   listeJNO = getListeJNO();
                    for (var i = 0; i < listeJNO.length; i++) {
                        console.log(date >= listeJNO[i].Begin && date <= listeJNO[i].End);
                        if (date >= listeJNO[i].Begin && date <= listeJNO[i].End) {
    
                            return {
    
                                classes: 'morning-ferie'
                            };
                        }
                    }
                }
    

    【讨论】:

    • 问题是listeJNO 会在每天即将显示在日期选择器中时被加载
    猜你喜欢
    • 1970-01-01
    • 2021-02-15
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 2014-12-09
    • 1970-01-01
    相关资源
    最近更新 更多