2017-08-18 2 views
-1

Ich mache derzeit ein Dating-System in PHP und ich habe eine Datumsauswahl festgelegt, um die Tage zu deaktivieren, die bereits die maximale Anzahl von Terminen hatte. Um diesen Vorgang auszuführen, bewerben ich mich folgende:Deaktivieren Sie bestimmte Datumsauswahl-Tage

<script> 

function nDates(date){ 
    var nFechas = false; 
    $.ajax({ 
    type: "POST", 
    url: 'prueba.php', 
    data: {date}, 
    async: false, 
    success: function(data) { 
     if (data == 1) 
     nFechas = true; 
     else 
     nFechas = false; 
    }, 
    error: function() { 
     alert('Error occured'); 
    } 
    }); 
    return nFechas; 
} 


$(function() { 
    $.datepicker.setDefaults($.datepicker.regional["es"]); 
    $("#datepicker").datepicker({ 
    dateFormat: 'yy-mm-dd', 
    changeMonth:true, 
    changeYear:true, 
    yearRange: "2017:2018", 
    firstDay: 1, 
    minDate: 0, 

    beforeShowDay: function (date) { 
     var datesLimits = 20; 
     var day = date.getDay(); 
     var dd = date.getDate(); 
     var mm = date.getMonth()+1; 
     var yyyy = date.getFullYear(); 
     if(dd<10){ 
     dd='0'+dd; 
     } 
     if(mm<10){ 
     mm='0'+mm; 
     } 
     var date = yyyy+'-'+mm+'-'+dd; 
     if (day == 6 || day == 0) { 
     return [false, "somecssclass"] 
     } else { 
     if (nDates(date)){ 
      return [true, "someothercssclass"] 
     } else {         
      return [false, "somecssclass"] 
     } 
     }}, 

    monthNames: ['Enero', 'Febrero', 'Marzo', 
       'Abril', 'Mayo', 'Junio', 
       'Julio', 'Agosto', 'Septiembre', 
       'Octubre', 'Noviembre', 'Diciembre'], 
    monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 
         'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'], 
    dayNamesMin: ['Dom', 'Lun', 'Mar', 'Mie', 'Jue', 'Vie', 'Sab'], 
    closeText: 'Cerrar', 
    prevText: 'Anterior', 
    nextText: 'Siguiente', 
    currentText: 'Hoy', 
    }); 
}); 

</script> 

Was will ich jetzt ganz bestimmte Tage zu deaktivieren, zum Beispiel (14-09-2017) (25-12-2017) (28-12 -2017) und so weiter, aber was ich bis jetzt gemacht habe. Ich habe ein wenig gelesen und einige Dinge angewendet, aber ich finde nicht den Weg, um das, was ich gelesen habe, anzupassen.

+1

bitte einen Link zu dem picker bereitzustellen, die in Ihrer Website verwendet wird. Ist es das: https://jqueryui.com/datepicker/? –

+0

Schauen Sie sich [diese Antworten] an (https://stackoverflow.com/search?q=answers%3A1%2B+isaccepted%3Ayes+datepicker+disabled+dates) ... Ihre Lösung ist sicherlich da. –

+0

Es tut mir leid, aber ich denke, ich habe mich nicht verständlich gemacht, ich habe bereits mehrere Codes gelesen und angewendet, einschließlich der von var disableddates = ["8-21-2017", "12-11-2016", "8 -25-2017 "," 8-20-2017 "]; Funktion DisableSpecificDates (Datum) aber es beschädigt immer die Funktion, die ich vorher hatte, um jene Tage zu deaktivieren, wo die Termine das erlaubte Limit erreichen ... Ich will beide arbeiten und nicht den einen anderen ruinieren ... den vorShowDay kann ich nicht doppelt gelten – Lissi29

Antwort

0

Sie sollten auf jeden Fall alle Daten abrufen, die Sie deaktivieren möchten, bevor Sie Datepicker instanziieren.

Wie Sie es jetzt tun, lösen Sie so etwas wie 30 verschiedene Ajax-Anfragen (eine für jeden Tag, wie der Kalender rendert).

Und sobald die Anfrage ein Ergebnis abholen soll, "wartet" das Skript nicht darauf.
So kommt die Zeile return nFechas; sofort vor.

Ajax ist asynchron ... Es dauert einige Millisekunden, um die Anfrage zu senden und mit einem Ergebnis zurück zu kommen. Asynchron bedeutet: Es "pausiert" das Skript nicht.

Und wenn es das Skript pausiert ... Das würde bis zu 10 Sekunden (vielleicht mehr) dauern, um den Kalender zu rendern, was Sie sicher nicht mögen würden.

Es wird viel "teurer" auf Anfragen, wenn Sie alle Daten in einem Array beim Laden der Seite deaktiviert werden. Dann im Kalender Render, einfach überprüfen, ob das Datum in Array ist, um zu deaktivieren oder nicht.

Ihre beste Lösung ist also here.

EDIT

Try this:

if (day == 6 || day == 0) { 
    return [false, "somecssclass"] 
} else if (disabledArray.indexOf(date) != -1){ 
    return [false, "someothercssclass"] 
} else { 
    return [true, "anothercssclass"] 
} 
+0

nicht verstanden Um zu sehen, erkläre ich, mein Datepicker zu dieser Zeit hat 21-08-2017 und 23-08-2017 deaktiviert, weil es bereits die maximale Anzahl von Arztterminen registriert ... Ihre Lösung funktioniert in meinem Datepicker, aber es stellt sich heraus, dass es alleine funktioniert Das und automatisch deaktiviert die Validierung der Tage, die ich bereits hatte, einschließlich der Validierung der Tage der Wochenenden ...das ist das Problem, dass ich nicht beiden Validierungen beitreten kann, weil sie miteinander kollidieren, dass ich falsch handeln muss oder was ich nicht konsultieren kann. – Lissi29

+0

Sie können die Validierung, die Sie hatten, verwenden, um false zurückzugeben, wenn der Tag der Woche ist 6 oder 0 (Sat und Sonne) ... Gibt false zurück, wenn das Datum in einem deaktivierten Array gefunden wird ('array.indexOf (string)! = -1') und gibt true zurück, wenn das Datum mit einem dieser 3 Fälle übereinstimmt . –

+0

Ich habe es in diesem Teil speziell auf diese Weise platziert, wenn (Tag == 6 || Tag == 0 || array.indexOf (Zeichenfolge) == -1) {return [false, "somecsclass"] und datepicker was es ist Ist deaktiviert vollständig und aktiviert nur die Tage, die innerhalb des Arrays sind ... Wenn ich wahr in der Rückkehr anstelle von false setzen, was funktioniert in der Regel funktioniert der Datepicker ohne die neue Validierung der bestimmten Tage zu deaktivieren – Lissi29

Verwandte Themen