J'ai essayé de chercher une solution à mon problème de datepicker de l'interface utilisateur Jquery et je n'ai pas de chance. Voici ce que j'essaye de faire ...
J'ai une application dans laquelle je fais du PHP complexe pour renvoyer un tableau JSON de dates que je veux BLOQUER hors de l'interface utilisateur Jquery Datepicker. Je retourne ce tableau:
["2013-03-14","2013-03-15","2013-03-16"]
N'y a-t-il pas un moyen simple de dire simplement: bloquer ces dates dans le sélecteur de date?
J'ai lu la documentation de l'interface utilisateur et je ne vois rien qui m'aide. Quelqu'un a des idées?
jquery-ui
jquery-ui-datepicker
Daniel White
la source
la source
Réponses:
Vous pouvez utiliser beforeShowDay pour ce faire
L'exemple suivant désactive les dates du 14 mars 2013 au 16 mars 2013
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 ] } });
Démo: Fiddle
la source
return array.indexOf(string) != -1 ? [false] : $.datepicker.noWeekends(date);
IE 8 n'a pas de fonction indexOf, j'ai donc utilisé jQuery inArray à la place.
$('input').datepicker({ beforeShowDay: function(date){ var string = jQuery.datepicker.formatDate('yy-mm-dd', date); return [$.inArray(string, array) == -1]; } });
la source
Si vous souhaitez également bloquer les dimanches (ou autres jours) ainsi que le tableau des dates, j'utilise ce 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]; } }); });
la source
$('input').datepicker({ beforeShowDay: function(date){ var string = jQuery.datepicker.formatDate('yy-mm-dd', date); return [ array.indexOf(string) == -1 ] } });
la source
beforeShowDate n'a pas fonctionné pour moi, alors j'ai développé ma propre solution:
$('#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]; }); }
la source
Pour JJ-MM-AA, utilisez ce 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, '']; }
la source
Si vous souhaitez désactiver des dates particulières dans jquery datepicker, voici la démo simple pour vous.
<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>
la source