JQuery UIの日付ピッカーで日を強調表示するためにbeforeShowDayを使用する方法次の日付配列があります
Array
(
[0] => 2011-07-07
[1] => 2011-07-08
[2] => 2011-07-09
[3] => 2011-07-10
[4] => 2011-07-11
[5] => 2011-07-12
[6] => 2011-07-13
)
私は使用して問題を解決しました
var disabledDays = ["2011-7-21","2011-7-24","2011-7-27","2011-7-28"];
var date = new Date();
jQuery(document).ready(function() {
$( "#dateselector").datepicker({
dateFormat: 'yy-mm-dd',
beforeShowDay: function(date) {
var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();
for (i = 0; i < disabledDays.length; i++) {
if($.inArray(y + '-' + (m+1) + '-' + d,disabledDays) != -1) {
//return [false];
return [true, 'ui-state-active', ''];
}
}
return [true];
}
});
});
ドキュメントをご覧ください。
beforeShowDay 関数は日付をパラメーターとして受け取り、[0]がtrue/falseで、この日付が選択可能かどうかを示す配列を返す必要があります。[1]はCSSクラス名と同じです)または ''(デフォルトのプレゼンテーションの場合)、[2]この日付のオプションのポップアップツールチップ。表示される前に、日付ピッカーで毎日呼び出されます。
つまり、日付を取り、パラメータの配列を返す関数を作成する必要があります。ここで、値は次のとおりです。
ここに例があります:
var your_dates = [new Date(2011, 7, 7),new Date(2011, 7, 8)]; // just some dates.
$('#whatever').datepicker({
beforeShowDay: function(date) {
// check if date is in your array of dates
if($.inArray(date, your_dates)) {
// if it is return the following.
return [true, 'css-class-to-highlight', 'tooltip text'];
} else {
// default
return [true, '', ''];
}
}
});
そして、日付を強調するスタイルを追加できます
<style>
.css-class-to-highlight{
background-color: #ff0;
}
</style>
最も投票された回答が機能していないことがわかりました。機能するようにコードを少し更新しました。 $ .inArray()は主にindexOf()を検索します。また、2つの日付が等しいかどうかを直接比較することもできません。参照: JavaScriptで2つの日付を比較
function inArrayDates(needle, haystack){
var found = 0;
for (var i=0, len=haystack.length;i<len;i++) {
if (haystack[i].getTime() == needle.getTime()) return i;
found++;
}
return -1;
}
そして受け入れられた関数を次のように更新します
if(inArrayDates(date, markDates) != -1) {
return [true, 'selected-highlight', 'tooltip here'];
} else {
return [true, '', ''];
}
JSの日付はオブジェクトDate
のインスタンスであるため、==
または===
を使用して日付が等しいかどうかを適切にチェックすることはできません。
シンプルなソリューション:
var your_dates = [
new Date(2017, 4, 25),
new Date(2017, 4, 23)
];
$( "#some_selector" ).datepicker({
beforeShowDay: function(date) {
are_dates_equal = d => d.getTime() === date.getTime();
if(your_dates.some(are_dates_equal)) {
return [true, 'ui-state-active', ''];
}
return [true, '', ''];
}
})
無効になる日付を指定し、使用可能な日付の色を表示するだけでよい単純な解決策が得られました。
<style>
.availabledate a {
background-color: #07ea69 !important;
background-image :none !important;
color: #ffffff !important;
}
</style>
そしてスクリプトではこれを使用します:
<script>
$(function() {
//This array containes all the disabled array
datesToBeDisabled = ["2019-03-25", "2019-03-28"];
$("#datepicker").datepicker({
changeMonth: true,
changeYear: true,
minDate : 0,
todayHighlight: 1,
beforeShowDay: function (date) {
var dateStr = jQuery.datepicker.formatDate('yy-mm-dd', date);
if(dateStr){
return [datesToBeDisabled.indexOf(dateStr) == -1,"availabledate"];
}else{
return [datesToBeDisabled.indexOf(dateStr) == -1,""];
}
},
});
});
</script>
それが誰かを助けることを願っています。
http://jqueryui.com/demos/datepicker/#event-beforeShowDay
BeforeShowDayの日付パラメーターを配列にある日付と比較し、一致がある場合は、上記のリンクで定義されている配列を返します。
BeforeShowDayから返す配列では、2番目の要素を使用して、日付に使用されるクラス名を設定します。その後、cssを使用して、そのクラスのスタイルを設定できます。