Jquery UI Datepicker. Array von Daten deaktivieren


84

Ich habe versucht, nach einer Lösung für mein Jquery UI Datepicker-Problem zu suchen, und ich habe kein Glück. Folgendes versuche ich zu tun ...

Ich habe eine Anwendung, in der ich ein komplexes PHP mache, um ein JSON-Array von Daten zurückzugeben, die ich aus dem Jquery UI Datepicker BLOCKIEREN möchte. Ich gebe dieses Array zurück:

["2013-03-14","2013-03-15","2013-03-16"]

Gibt es nicht eine einfache Möglichkeit, einfach zu sagen: Blockieren Sie diese Daten vom Datepicker?

Ich habe die UI-Dokumentation gelesen und sehe nichts, was mir hilft. Hat jemand irgendwelche Ideen?






Kann mich jemand auf ähnliche Fragen hinweisen, aber Materialise Datepicker verwenden?
Naz786

Antworten:


206

Sie können beforeShowDay verwenden , um dies zu tun

Im folgenden Beispiel werden die Daten vom 14. März 2013 bis 16. März 2013 deaktiviert

var array = ["2013-03-14","2013-03-15","2013-03-16"]

$('input').datepicker({
    beforeShowDay: function(date){
        var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
        return [ array.indexOf(string) == -1 ]
    }
});

Demo: Geige


1
Ich weiß, wohin du damit gehst. Wie würde ich meine Datenreihe einbinden?
Daniel White

14
BEEINDRUCKEND. Du bist ein verdammt genialer Bruder. Ich weiß nicht, warum dies nicht bereits in den Stapelüberlauf-Posts für diese Frage enthalten ist, da sie millionenfach gestellt wurde. Alle oben aufgeführten Beispiele sind zu kompliziert, das ist schön und einfach. 5 Sterne. Vielen Dank.
Daniel White

Ich habe den Code jqueryui.com/download/… heruntergeladen, aber wenn ich den obigen Code in ihn integriere, funktioniert es nicht. Bitte helfen Sie
Sam

Eine Gegenstimme reicht nicht aus. Manche Leute machen die Dinge viel komplizierter als nötig. Vielen Dank für ein einfaches, funktionierendes Snippet. Sehr hilfreich.
0112

4
Wenn Sie neben diesen benutzerdefinierten Daten auch Wochenenden ausschließen möchten, ersetzen Sie die Rückleitung durch folgende:return array.indexOf(string) != -1 ? [false] : $.datepicker.noWeekends(date);
Pablo SG Pacheco

20

IE 8 hat keine indexOf-Funktion, daher habe ich stattdessen jQuery inArray verwendet.

$('input').datepicker({
    beforeShowDay: function(date){
        var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
        return [$.inArray(string, array) == -1];
    }
});

6
@ChristopherStrydom Sie wären überrascht, wie viele Leute es noch benutzen.
Euther

3
Dies liegt daran, dass IE8 der neueste IE-Browser ist, der unter WinXP (SP3) ausgeführt wird.
JosephK

Es unterstützt jedoch die Funktion indexOf () für eine Zeichenfolge, um die Position eines Teilstrings in dieser Zeichenfolge zu ermitteln.
Wezy

9

Wenn Sie auch Sonntage (oder andere Tage) sowie die Anzahl der Daten blockieren möchten, verwende ich diesen Code:

jQuery(function($){

    var disabledDays = [
       "27-4-2016", "25-12-2016", "26-12-2016",
       "4-4-2017", "5-4-2017", "6-4-2017", "6-4-2016", "7-4-2017", "8-4-2017", "9-4-2017"
    ];

   //replace these with the id's of your datepickers
   $("#id-of-first-datepicker,#id-of-second-datepicker").datepicker({
      beforeShowDay: function(date){
         var day = date.getDay();
         var string = jQuery.datepicker.formatDate('d-m-yy', date);
         var isDisabled = ($.inArray(string, disabledDays) != -1);

         //day != 0 disables all Sundays
         return [day != 0 && !isDisabled];
      }
   });
});   

1
$('input').datepicker({
   beforeShowDay: function(date){
       var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
       return [ array.indexOf(string) == -1 ]
   }
});

1

beforeShowDate hat bei mir nicht funktioniert, also habe ich meine eigene Lösung entwickelt:

$('#embeded_calendar').datepicker({
               minDate: date,
                localToday:datePlusOne,
               changeDate: true,
               changeMonth: true,
               changeYear: true,
               yearRange: "-120:+1",
               onSelect: function(selectedDateFormatted){

                     var selectedDate = $("#embeded_calendar").datepicker('getDate');

                    deactivateDates(selectedDate);
                   }

           });


              var excludedDates = [ "10-20-2017","10-21-2016", "11-21-2016"];

              deactivateDates(new Date());

            function deactivateDates(selectedDate){
                setTimeout(function(){ 
                      var thisMonthExcludedDates = thisMonthDates(selectedDate);
                      thisMonthExcludedDates = getDaysfromDate(thisMonthExcludedDates);
                       var excludedTDs = page.find('td[data-handler="selectDay"]').filter(function(){
                           return $.inArray( $(this).text(), thisMonthExcludedDates) >= 0
                       });

                       excludedTDs.unbind('click').addClass('ui-datepicker-unselectable');
                   }, 10);
            }

            function thisMonthDates(date){
              return $.grep( excludedDates, function( n){
                var dateParts = n.split("-");
                return dateParts[0] == date.getMonth() + 1  && dateParts[2] == date.getYear() + 1900;
            });
            }

            function getDaysfromDate(datesArray){
                  return  $.map( datesArray, function( n){
                    return n.split("-")[1]; 
                });
             }

Können wir dasselbe bei dateRangePicker tun?
Sunil Rawat

1

Verwenden Sie für TT-MM-JJ diesen Code:

var array = ["03-03-2017 ', '03 -10-2017', '03 -25-2017"]

$('#datepicker').datepicker({
    beforeShowDay: function(date){
    var string = jQuery.datepicker.formatDate('dd-mm-yy', date);
    return [ array.indexOf(string) == -1 ]
    }
});

function highlightDays(date) {
    for (var i = 0; i < dates.length; i++) {
    if (new Date(dates[i]).toString() == date.toString()) {
        return [true, 'highlight'];
    }
}
return [true, ''];
}

Ist es für daterangepicker möglich, ich möchte eine Reihe von Daten auf Datumsbereichsauswahl deaktivieren?
Sunil Rawat

Können Sie bitte Ihre Frage definieren?
Dierig Patrick

Ich habe Datumsbereichsauswahl angenommen: 01/01/2017 - 31/03/2017. Ich möchte einige Daten und eine Reihe von benutzerdefinierten Datumsangaben zwischen diesem Bereich hervorheben. im Datumsbereich Kalender. $ Termine = ['02 /01/2017','03/01/2017'...bis] diese Daten. ist möglich
Sunil Rawat

Wie in Datepicker können wir verwenden: beforeShowDay-Funktion für diesen Zweck, was gibt es in Date-Range-Picker: daterangepicker.com
Sunil Rawat

1

Wenn Sie bestimmte Daten in jquery datepicker deaktivieren möchten, finden Sie hier die einfache Demo.

<script type="text/javascript">
    var arrDisabledDates = {};
    arrDisabledDates[new Date("08/28/2017")] = new Date("08/28/2017");
    arrDisabledDates[new Date("12/23/2017")] = new Date("12/23/2017");
    $(".datepicker").datepicker({
        dateFormat: "dd/mm/yy",
        beforeShowDay: function (date) {
            var day = date.getDay(),
                    bDisable = arrDisabledDates[date];
            if (bDisable)
                return [false, "", ""]
        }
    });
</script>
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.