2017-11-22 6 views
0

カレンダーに予定を作成したい場合は、自動的に前に移動するイベントは、元の時刻に30分追加する理由が分かりません。13:00consloe13:30、なぜか分かりません。fullcalendarがクリックで自動的に30分移動するのはなぜですか?

また、私は<input>フィールドを作成して開始時間を設定して、選択した日時を確認して、もう一度30マイルの日時を取得します。 selectコールバックのあなたの定義が間違っている

$(document).ready(function() { 
    var initialLocaleCode = 'ru'; 
    var d = new Date(); 
    $('#calendar').fullCalendar({ 

     header: { 
      left: 'next today', 
      center: 'title', 
      right: 'month,agendaWeek,agendaDay,listMonth' 
     }, 

     timezone: 'local', 
     defaultView: 'agendaWeek', 
     height: 650, 
     locale: initialLocaleCode, 
     navLinks: true, 
     selectable: true, 
     selectHelper: true, 
     editable: false, 
     resizable: true, 
     eventResize: true, 
     minTime: "06:00:00", 
     maxTime: "22:00:00", 
     eventLimit: 6, 
     unselectAuto: false, 
     selectConstraint: 'businessHours', 
     businessHours: 
     [ 
      {% for work in current_user.work_hours %} 
      { 
       dow: [{{work.day_number}}], 
       start: '{{work.work_start.strftime("%H:%M")}}', 
       end: '{{work.work_end.strftime("%H:%M")}}', 
      }, 
      {% endfor %} 
     ], 

     select: function(mydate, start, end, event, jsEvent, allDay, view, element) { 

      var DaysOK = [1,2,3,4,5,6,7]; 
      var mydateObj = new Date(mydate); 
      var chosenDay = mydateObj.getUTCDay(); 

      var modal = $('#modal_calendar'); 
      var title = $("select#serviceTitleCalendar option").filter(":selected").val(); 

      if (title) { 

      $(modal).attr('style', 'display: block; top: 53px; left: 404px;'); 
      $('body').append('<div id="mwb" onclick="MWHide()"></div>'); 

      $("select#serviceTitleCalendar option").filter(function() { 
       return $(this).val() == $("#serviceSet").val(); 
      }).attr('selected', true); 

      $('#book-calendar').val(moment(start).format('YYYY-MM-DD HH:mm')); 

      $("select#serviceTitleCalendar").off("change"); 
      $('#send-appo').off("click"); 

      $("select#serviceTitleCalendar").on("change", function() { 

       var nameService = $(this).val(); 
       var csrf_token = "{{ csrf_token() }}"; 
       $('.loading').html('<div class="spinner"> <img id="ld_spinner" src="/static/img/icon/circle-slack.gif" alt="spinner"/></div>'); 
       if ($(this).val() == 'Выберите услугу') { 
       $('#dynamic-period').text('минутами'); 
       $('.loading').html('<div class="spinner" style="display: none;"></div>'); 
       return false; 
       } else { 
       setTimeout(function(){ 
        $.ajax({ 
        type: 'post', 
        cache: false, 
        url: '{{url_for("panel_abonent.get_service_period")}}', 
        data: { 
         service_period: nameService 
        }, 
        beforeSend: function(xhr, settings) { 
         if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) { 
          xhr.setRequestHeader("X-CSRFToken", csrf_token); 
         } 
        }, 
        complete: function(){ 
         $('.loading').html('<div class="spinner" style="display: none;"></div>'); 
        }, 
        success: function(data){ 
         if (data.time_period){ 
         $('input[name="period"]').val(data.time_period); 
         $('#dynamic-period').text(data.time_period.split(':')[1]+' минут'); 
         } else { 
         return false; 
         } 
        } 
        }) 
       }, 2000); 
       } 
      }); 
     } 
    }); 
}); 

答えて

1

:ここ

は私コードです。

あなたは与えた:

select: function(mydate, start, end, event, jsEvent, allDay, view, element) { 

をしかしfullCalendarドキュメント(https://fullcalendar.io/docs/selection/select_callback/)は、それを実行したときfullCalendarは、その機能に供給することになるパラメータを示しています。

function(start, end, jsEvent, view, [ resource ]) 

(ここで、リソースはSchedulerプラグインを持っているかどうかによってオプションです)。

このマニュアルには、リストの最初のパラメータを「開始」、2番目のパラメータを「終了」とする例があります。もちろん、好きなものを呼び出すこともできますが、それらのパラメータに含まれるものを示すことを意図しています。

ただし、コードでは、最初のパラメータ "myDate"を呼び出して、2番目のパラメータを "開始"と呼びます。これは、実際にはの2番目のパラメータがであることを意味しません。それはあなたが使用することを決めた名前です。

また、パラメータをあまりにも多く定義すると、fullCalendarより多くの値が送信されます。それに供給されたfullCalendar値にパラメータをマッピングすると、あなたを与える:

  • いるMyDate:JavaScriptイベントで:選択
  • エンドの終了日/時間:選択
  • 開始の日付/時刻を起動します現在のビュー
  • jsEvent:リソース(ただし、スケジューラを使用する場合にのみ、それ以外の場合は、値なし。)
  • ビュー:(値なし)
  • マウスは
  • イベントをコーディネートなどの情報
  • 要素:あなたが

    $('#book-calendar').val(moment(start).format('YYYY-MM-DD HH:mm')); 
    

    を書くとき(値なし)

だから、あなたが "開始" と呼ばれる変数は、実際には終了時刻が含まれています。スロットのデフォルトの時間は30分です。そのため、クリックした時間の30分後にその値が表示されます。

"select"コールバックの定義をドキュメントに合わせる必要があります。それ以外の場合は意味をなさないものとします。

は、コンセプトを明確にする:あなたはこのようなコールバックを定義するとき、あなたは後で実行する機能をfullCalendar与えています。あなたが好きどんなパラメータ 名を指定することができ、あなただけの余分なパラメータを追加することはできません - どのようにfullCalendarは、あなたが意図したものを知っているだろう、またはそれのために何の値を供給するために? fullCalendarコードには、あなたが与えた関数を呼び出す固定コードがすでにあり、それが決定したパラメータを送るでしょう。プログラマーがコードを書いたときに、その数のパラメーターとその情報の種類が決定されます。パラメータのみはランタイムではなく、量またはタイプで決定されます。あなたはそれを支配していません。

+0

常に感謝の男セーバー、私は、正しい方法で 'SELECT'のパラメータを入力する必要があることに気づいていませんでした今ではすべてが働いている;) – swordfish

+0

心配、助けて幸せ。実際に私はあなたのユーザー名を認識し、ちょうど今、あなたの質問履歴を探していた、と私は数日前にこの1上のコメントの中で、すでにあなたにこれと同じことを述べ気づい:https://stackoverflow.com/questions/47241352/how-ディセーブル・レンジ・オブ・日付・依存・オン・-作業時間 – ADyson

+1

実際に私はそれについて忘れてしまった、私は 'selectConstraint'選択を使用しなければならなかったところ、その質問は少し違っていた、また、私がやりました同じ間違いだがもう一度気付かなかった;) – swordfish

関連する問題