在$("")之前触发一个函数.datepicker()

时间:2017-08-13 14:13:15

标签: javascript jquery datepicker

我在listeJNO函数

中有一个beforeShowDay变量
$('#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中的数据,beforeShowDay内的$('calendrier').datepicker({...})选项始终先于listeJNO

中没有数据

2 个答案:

答案 0 :(得分:0)

您是否尝试在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'
                        };
                    }
                }
            }

答案 1 :(得分:0)

一个选项是在完成listeJNO的加载时初始化datepicker。 您可以通过返回一个promise并在“then”回调中设置datepicker来完成此操作。

首先创建将数据加载到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 soomething 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();