Bootstrap Datepicker nach Auswahl ausblenden

97

Wie verstecke ich den Kalender, nachdem ein Datum ausgewählt wurde? Gibt es eine bestimmte Funktion, die ich verwenden kann? Mein Code unten:

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

Jede Hilfe wäre dankbar.

jheul
quelle
6
Warum ist dies nicht das Standardverhalten der Bibliothek?
Sport

Antworten:

156

Sie können das Ereignis verwenden changedate(), um zu verfolgen, wann das Datum geändert wird, und die datepicker('hide')Methode, um das datepickernach dem Auswählen ausgewählte Element auszublenden :

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

Demo

AKTUALISIEREN

Dies war der Fehler mit autoclose: true. Dieser Fehler wurde im neuesten Master behoben. SEHEN SIE DIE COMMIT. Holen Sie sich den neuesten Code vonGitHub

Felix
quelle
7
Ich würde empfehlen, zusätzlich zu überprüfen, ob der aktuelle Ansichtsmodus "Tage" ist: if (ev.viewMode === 'days') {$(this).datepicker('hide');}da Sie den Datumsauswahl wahrscheinlich nicht ausblenden möchten, nachdem Sie einen Monat oder ein Jahr ausgewählt haben}
Turan
1
Es sieht so aus, als ob Autoclose standardmäßig auf false gesetzt ist ... $(".date").datepicker({... autoclose: true, ... });funktioniert gut !!!
Dani
45

Wenn es jemandem hilft, funktioniert die Version 2.0 des Bootstrap-Datepickers nicht mehr mit der akzeptierten Antwort.

So habe ich es bei mir zum Laufen gebracht:

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

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

Ola
quelle
Es gibt eine Version 2? Ich sehe v1.6.4 als die neueste Veröffentlichung auf Github
Garryp
Verwenden Sie Autoclose (siehe @ Salims Antwort oder die aktualisierte akzeptierte Antwort), anstatt das Ereignis manuell zu behandeln. Wenn Sie die Datumsauswahl ausblenden, wenn das Datum geändert wird, kann der Versuch, das Datum einzugeben, zu unerwünschtem Verhalten führen.
Einseitig
35
$('#input').datepicker({autoclose:true});
MaxEcho
quelle
4
Das ist die perfekte Antwort. Dies sollte die genehmigte Antwort sein.
Sarower Jahan
3

Wenn Sie das Verhalten des Kalenders im Allgemeinen global überschreiben möchten, versuchen Sie, die Datepicker-Funktion zu bearbeiten (in meinem Beispiel war es Zeile 82).

von

    this.autoclose = false;

zu

    this.autoclose = true;

Hat für mich gut funktioniert, da ich wollte, dass sich alle meine Kalenderinstanzen gleich verhalten.

user3674664
quelle
2
Die Standardeigenschaften in der js-Bibliothek müssen nicht geändert werden. Sie können es als Eigenschaft des Objekts an die Funktion übergeben, wenn Sie es aufrufen. Beispiel: $ ('# dob'). Datepicker ({Format: 'TT / MM / JJJJ', automatische Schließung: true});
Zeeshan
3

Das Problem kann gestoppt werden, indem das Versteckereignis für das Eingabeelement durch diese Zeile blockiert wird:

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

Papacho
quelle
Danke Kumpel! Ich wurde wütend, weil die Eingabe nach der Datumsauswahl ausgeblendet wurde, und dies löste mein Problem. Prost !
Spacebiker
3
  1. Öffnen Sie einfach die bootstrap-datepicker.js
  2. finden : var defaults = $.fn.datepicker.defaults
  3. einstellen autoclose: true

Speichern und aktualisieren Sie Ihr Projekt und dies sollte reichen.

user3615318
quelle
2

Verwenden Sie in Bootstrap 4 "autoHide: true".

$('#datepicker1').datepicker({
    autoHide: true,
    format: 'mm-yyyy',
    endDate: new Date()
});
Ankit24007
quelle
Schöne Antwort Ankit
Shashank Singh
1

Schließen Sie den datetimepicker, wenn Sie das Datum auswählen (datetimepicker zeigt Datum mit Uhrzeit an).

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

Ich habe eine perfekte Lösung:

$('#Date_of_Birth').datepicker().on('changeDate', function (e) {
    if(e.viewMode === 'days')
        $(this).blur();
});
Gordon Ma
quelle
0
$('.datepicker').datepicker({
    autoclose: true
}); 
user3706926
quelle
Eine andere Antwort auf diese Frage ist genau die gleiche wie Ihre. OP hat dies auch autoclose: truein ihrem Beispielcode.
93196.93
0

Ich habe auf datetimepicker umgestellt und auf 'TT / MM / JJJJ' formatiert.

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

Zumindest in Version 2.2.3, die ich verwende, müssen Sie autoClosestattdessen verwenden autoclose. Brief Fall zählt.

TimA
quelle
0

Sie können den Quellcode bootstrap-datepicker.js ändern . Füge this.hide();wie ne hinzu

  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
quelle
0

Ich habe ein Problem mit der Uhr, das immer noch angezeigt wird, auch wenn ich das Format geschrieben habe: 'JJJJ-MM-TT' ,

Ich musste einstellen pickTime: falseund nach dem Ändern-> Verstecken musste ich mich konzentrieren-> zeigen

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

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

$('#VBS_RequiredDeliveryDate').on('focus', function(){
    $('.datepicker').show();
});
Dyrwoolf
quelle
0

Für Datetime Picker

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

Verwenden Sie dies für datetimepicker, es funktioniert gut

$('#Date').data("DateTimePicker").hide();
sugumar
quelle
0

Ich habe das noch nicht erwähnt gesehen, aber das hat es für mich behoben:

switchOnClick: true
edrakali
quelle