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.


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


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


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});

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.


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();
});


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.


2

Verwenden Sie in Bootstrap 4 "autoHide: true".

$('#datepicker1').datepicker({
    autoHide: true,
    format: 'mm-yyyy',
    endDate: new Date()
});

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
}); 

1
$('yourpickerid').datetimepicker({
           pickTime: false
}).on('changeDate', function (e) {
           $(this).datetimepicker('hide');
});

0

Ich habe eine perfekte Lösung:

$('#Date_of_Birth').datepicker().on('changeDate', function (e) {
    if(e.viewMode === 'days')
        $(this).blur();
});

0
$('.datepicker').datepicker({
    autoclose: true
}); 

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();
});

0

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


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
 }

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();
});

0

Für Datetime Picker

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

0

Verwenden Sie dies für datetimepicker, es funktioniert gut

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

0

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

switchOnClick: true
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.