web-dev-qa-db-fra.com

Limiter bootstrap-datepicker aux jours de la semaine seulement?

Est-il possible d'autoriser uniquement les sélections de jours de semaine dans le sélecteur de date d'amorçage trouvé ci-dessous? https://github.com/eternicode/bootstrap-datepicker/

Je instancier le sélecteur de date comme ceci:

$('#datepicker').datepicker();

/* Update datepicker plugin so that MM/DD/YYYY format is used. */
$.extend($.fn.datepicker.defaults, {
    parse: function (string) {
        var matches;
        if ((matches = string.match(/^(\d{2,2})\/(\d{2,2})\/(\d{4,4})$/))) {
            return new Date(matches[3], matches[1] - 1, matches[2]);
        } else {
            return null;
        }
    },
    format: function (date) {
        var
        month = (date.getMonth() + 1).toString(),
        dom = date.getDate().toString();
        if (month.length === 1) {
            month = "0" + month;
        }
        if (dom.length === 1) {
            dom = "0" + dom;
        }
        return month + "/" + dom + "/" + date.getFullYear();
    }
});  

Merci pour toute aide.

17
SWL

La dernière version de https://github.com/eternicode/bootstrap-datepicker dispose déjà d'une option pour désactiver la sélection de jours de la semaine particuliers. De les docs :

daysOfWeekDisabled

Chaîne, tableau. Défaut: '', []

Jours de la semaine qui devraient être désactivés. Les valeurs sont comprises entre 0 (dimanche) et 6 (samedi). Plusieurs valeurs doivent être séparées par des virgules. Exemple: désactivez les week-ends: '0,6' ou [0,6].

En d'autres termes, instanciez simplement votre datepicker comme ceci:

$('#datepicker').datepicker({
    daysOfWeekDisabled: [0,6]
});

Voici un jsfiddle démontrant ceci: http://jsfiddle.net/vj77M/1/

28
fin

** METTRE À JOUR **

Bootstrap datepicker a maintenant une option daysOfWeekDisabled. Voir la réponse de @ fin ci-dessous.

** ANCIENNE REPONSE **

Voici une démo de travail

En supposant que vos semaines commencent le dimanche:

$(function() {
    function disableWeekends($this) {
        var $days = $this.find('.datepicker-days tr').each(function() {
            var $days = $(this).find('.day');
            $days.eq(0).addClass('old').click(false); //Sunday
            $days.eq(6).addClass('old').click(false); //Saturday
        });

    }

    $('#dp1').datepicker({
        format: 'mm-dd-yyyy'
    });

    // get instance of the jQuery object created by
    // datepicker    
    var datepicker = $('#dp1').data('datepicker').picker;

    // disable weekends in the pre-rendered version
    disableWeekends(datepicker);

    // disable weekends whenever the month changes
    var _fill = datepicker.fill;
    datepicker.fill = function() {
        _fill.call(this);
        disableWeekends(this.picker);
    };

});​

Sinon, changez simplement $ days.eq (...) en index corrects.

Bien entendu, cela ne couvre que l'événement de clic et vous dirige dans la bonne direction. Je suis tout à fait sûr que d’autres problèmes comme la navigation au clavier devront peut-être être résolus.


MODIFIER

Pour la dernière version, utilisez ce code si approprié

// get instance of the jQuery object created by datepicker    
var datepicker = $('#dp1').data('datepicker');

// disable weekends in the pre-rendered version
disableWeekends(datepicker.picker);

// disable weekends whenever the month changes
var _fill = datepicker.fill;
datepicker.fill = function() {{
    _fill.call(this);
    disableWeekends(datepicker.picker);
}};
11
Kato

aussi vous pouvez l'essayer. 

onRender: function(date) {
    return date.getDay() == 0 || date.getDay() == 6 ? 'disabled' : '';
}

j'espère que ça aide quelqu'un. :)