2017-07-29 79 views
1

私のアプリでdatetime pickerとして 'flatpickr'を使用しています。この日付選択ツールでは、複数の日付を選択できますが、ドキュメントを読んだ後は、選択した日付の最大値を制限する方法が見つかりません。Flatpickr - 選択できる日付の数を制限する

のjQuery:

ここ
$('#gig_date_multi').flatpickr({ 
    "mode": "multiple", 
    "locale": "<%= I18n.locale %>", 
    minDate: new Date(), 
    enableTime: true, 
    time_24hr: true, 
    minuteIncrement: 15, 

    onChange: function(selectedDates, dateStr, instance) { 

     var array = selectedDates; 
     if (array.length >= 3) { 
     console.log("YOU HAVE REACHED YOUR LIMIT") 
     } else { 
     console.log("YOU CAN STILL SELECT MORE DATES") 
     } 

     var newHTML = []; 
     $.each(array, function(index, value) { 
     var formatted = moment(value).format("HH:mm - dddd Do MMMM YYYY"); 
     newHTML.push('<span>' + formatted + '</span>'); 
     }); 

     $(".multi-dates").html(newHTML.join("")); 

    } 
}); 

3つの日付は、コンソール出力を選択している「あなたは限界に達してきた」と、これが発生したときに、私は(以前に選択したものから離れて)すべての日付を無効にする可能性が多分考えていました。

Flatpickrはdisableenableの機能を持っていますが、これをコードにどのように組み込むことができないのですか...私はjqueryの初心者です。

ドキュメントには、これら2つの方法が示されています。

を使用でき
{ 
    "disable": [ 
     function(date) { 
      // return true to disable 
      return (date.getDay() === 5 || date.getDay() === 6); 

     } 
    ], 
    "locale": { 
     "firstDayOfWeek": 1 // start week on Monday 
    } 
} 

{ 
    enable: ["2017-03-30", "2017-05-21", "2017-06-08", new Date(2017, 8, 9) ] 
} 
+0

これらは、選択できる範囲の日付か個別の日付ですか? – Cue

+0

@Cueこれは選択できる個々の日付です。 –

答えて

2

set(option, value)

必要な場合は、カレンダーを再描画し、現在のビューを更新し、値optionto設定オプションを設定します。

選択した3人以外のすべての日付を無効にするには

instance.set('enable', selectedDates); 

をして、リセットするために次のことができます:書くことができます

instance.set('enable', []); 

異なるアプローチがEnabling dates by a functionに基づくことができる。

instance.set('enable', [function(date) { 
    if (selectedDates.length >= 3) { 
     var currDateStr = FlatpickrInstance.prototype.formatDate(date, "d/m/Y") 
     var x = selectedDatesStr.indexOf(currDateStr); 
     return x != -1; 
    } else { 
     return true; 
    } 
}]); 

スニペット:

$('#gig_date_multi').flatpickr({ 
 
    "mode": "multiple", 
 
    "locale": 'en', 
 
    minDate: new Date(), 
 
    enableTime: true, 
 
    time_24hr: true, 
 
    minuteIncrement: 15, 
 
    onChange: function(selectedDates, dateStr, instance) { 
 
     var selectedDatesStr = selectedDates.reduce(function(acc, ele) { 
 
      var str = FlatpickrInstance.prototype.formatDate(ele, "d/m/Y"); 
 
      acc = (acc == '') ? str : acc + ';' + str; 
 
      return acc; 
 
     }, ''); 
 
     instance.set('enable', [function(date) { 
 
      if (selectedDates.length >= 3) { 
 
       var currDateStr = FlatpickrInstance.prototype.formatDate(date, "d/m/Y") 
 
       var x = selectedDatesStr.indexOf(currDateStr); 
 
       return x != -1; 
 
      } else { 
 
       return true; 
 
      } 
 
     }]); 
 
    } 
 
});
input[type="text"] { 
 
    width: 100%; 
 
    box-sizing: border-box; 
 
    -webkit-box-sizing:border-box; 
 
    -moz-box-sizing: border-box; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<link rel="stylesheet" href="https://unpkg.com/flatpickr/dist/flatpickr.min.css"> 
 
<script src="https://unpkg.com/flatpickr"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script> 
 

 

 
<input type="text" id="gig_date_multi">

+0

これはほとんど動作しているようですが、コードにバグがあるようです。 3つの日付を選択してから1つを選択解除すると、すべての時刻が00:00に変わります。 –

+0

@RobHughesそうです。遅れて申し訳ありません。スニペットが更新されました。お知らせ下さい。おかげで – gaetanoM

+0

これは多くのありがとう、これは今動作します。 'enable'または 'disable'関数は、すべての時間データを削除するように見えました。私は以前、cssセレクタを使って日付を隠して表示するようにコードを変更しましたが、それはうまくいくように見えましたが、私はあなたのコードを好みます。 –

関連する問題