Le sélecteur de date Bootstrap se cache après la sélection

97

Comment masquer le calendrier après la sélection d'une date? Y a-t-il une fonction spécifique que je peux utiliser? Mon code ci-dessous:

$('#dp1').datepicker({
    format: 'mm-dd-yyyy',
    startDate: '-15d',
    autoclose: true,
    endDate: '+0d' // there's no convenient "right now" notation yet
});

Toute aide serait appréciée.

jheul
la source
6
Pourquoi n'est-ce pas le comportement par défaut de la bibliothèque?
sports

Réponses:

156

Vous pouvez utiliser l'événement changedate()pour suivre le moment où la date est modifiée avec une datepicker('hide')méthode pour masquer le datepickeraprès avoir fait la sélection:

$('yourpickerid').on('changeDate', function(ev){
    $(this).datepicker('hide');
});

Démo

METTRE À JOUR

C'était le bug avec autoclose: true. Ce bogue a été corrigé dans le dernier master. VOIR LE COMMIT. Obtenez le dernier code deGitHub

Félix
la source
7
Je recommanderais en outre de vérifier si le mode d'affichage actuel est «jours»: if (ev.viewMode === 'days') {$(this).datepicker('hide');}car vous ne voulez probablement pas masquer le sélecteur de date après avoir sélectionné un mois ou une année}
turan
1
On dirait que la fermeture automatique est définie sur false par défaut ... $(".date").datepicker({... autoclose: true, ... });fonctionne bien !!!
Dani
45

Si cela aide quelqu'un, la version 2.0 du sélecteur de date bootstrap ne fonctionne plus avec la réponse acceptée.

Voici comment je l'ai fait fonctionner sur le mien:

$('yourpickerid').datepicker({
    format: 'dd/mm/yyyy',
}).on('changeDate', function(e){
    $(this).datepicker('hide');
});

Voir http://bootstrap-datepicker.readthedocs.org/en/latest/events.html#changedate

Ola
la source
Il y a une version 2? Je vois la v1.6.4 comme la dernière version sur Github
Garryp
Utilisez la fermeture automatique (voir la réponse de @ Salim ou la réponse acceptée mise à jour) au lieu de gérer l'événement manuellement. Si vous masquez le sélecteur de date lorsque la date est modifiée, la tentative de saisie de la date peut entraîner un comportement indésirable.
Déséquilibré
35
$('#input').datepicker({autoclose:true});
MaxEcho
la source
4
C'est la réponse parfaite. Cela devrait être la réponse approuvée.
Sarower Jahan
3

Si vous cherchez à remplacer le comportement du calendrier en général, globalement, essayez de modifier la fonction Datepicker (dans mon exemple, c'était la ligne 82),

de

    this.autoclose = false;

à

    this.autoclose = true;

Cela a bien fonctionné pour moi, car je voulais que toutes mes instances de calendrier se comportent de la même manière.

user3674664
la source
2
Pas besoin de changer les propriétés par défaut dans la bibliothèque js. Vous pouvez le transmettre en tant que propriété de l'objet à la fonction lorsque vous l'appelez. Exemple: $ ('# dob'). Datepicker ({format: 'jj / mm / aaaa', autoclose: true});
Zeeshan
3

Le problème peut être arrêté, bloquant l'événement hide pour l'élément d'entrée par ce linese:

var your_options = { ... };
$('.datetimepicker').datetimepicker(your_options).on('hide', function (e) {
    e.preventDefault();
    e.stopPropagation();
});

papacho
la source
Merci mon pote ! Je devenais fou parce que l'entrée était cachée après la sélection de la date, et cela a résolu mon problème. À votre santé !
spacebiker
3
  1. Ouvrez simplement le bootstrap-datepicker.js
  2. trouver : var defaults = $.fn.datepicker.defaults
  3. ensemble autoclose: true

Enregistrez et actualisez votre projet et cela devrait faire.

user3615318
la source
2

Dans bootstrap 4, utilisez "autoHide: true"

$('#datepicker1').datepicker({
    autoHide: true,
    format: 'mm-yyyy',
    endDate: new Date()
});
Ankit24007
la source
Belle réponse Ankit
Shashank Singh
1

Fermer datetimepicker lorsque la date est sélectionnée (datetimepicker afficher la date avec l'heure)

$('.datepicker').datepicker({
    autoclose: true,
    closeOnDateSelect: true
}); 
Gosha
la source
1
$('yourpickerid').datetimepicker({
           pickTime: false
}).on('changeDate', function (e) {
           $(this).datetimepicker('hide');
});
mirmo
la source
0

J'ai une solution parfaite:

$('#Date_of_Birth').datepicker().on('changeDate', function (e) {
    if(e.viewMode === 'days')
        $(this).blur();
});
Gordon Ma
la source
0
$('.datepicker').datepicker({
    autoclose: true
}); 
user3706926
la source
Une autre réponse à cette question est exactement la même que la vôtre. OP l'a également autoclose: truedans son exemple de code.
93196.93
0

J'ai changé pour datetimepicker et le format en 'JJ / MM / AAAA'

$("id").datetimepicker({
    format: 'DD/MM/YYYY',
}).on('changeDate', function() {
    $('.datepicker').hide();
});
Trieur
la source
0

Au moins dans la version 2.2.3 que j'utilise, vous devez utiliser à la autoCloseplace de autoclose. La casse des lettres compte.

TimA
la source
0

Vous pouvez changer le code source, bootstrap-datepicker.js . Ajouter this.hide();comme ne

  if (this.viewMode !== 0) {
    this.date = new Date(this.viewDate);
    this.element.trigger({
        type: 'changeDate',
        date: this.date,
        viewMode: DPGlobal.modes[this.viewMode].clsName
    });
    this.hide();//here
 }
Vladimir Kulakov
la source
0

Problème d'horloge toujours affiché même si j'ai écrit le format: 'AAAA-MM-JJ' ,

Je dois régler pickTime: falseet après le changement-> cacher je dois me concentrer- > montrer

$('#VBS_RequiredDeliveryDate').datetimepicker({
  format: 'YYYY-MM-DD',
  pickTime: false
});

$('#VBS_RequiredDeliveryDate').on('change', function(){
    $('.datepicker').hide();
});

$('#VBS_RequiredDeliveryDate').on('focus', function(){
    $('.datepicker').show();
});
dyrwoolf
la source
0

Pour le sélecteur de date / heure

$('yourpickerid').datetimepicker({
        format: 'dd/mm/yyyy',
}).on('changeDate', function(e){
        $(this).datetimepicker('hide');
});
srinivas gowda
la source
0

Utilisez ceci pour datetimepicker, cela fonctionne très bien

$('#Date').data("DateTimePicker").hide();
sucre
la source
0

Je n'ai pas vu cela mentionné, mais c'est ce qui a résolu le problème pour moi:

switchOnClick: true
edrakali
la source