2016-08-29 5 views
0

var expressがtrueの場合、最初の3つの選択可能な日にクラスを追加します。Jquery UI Datepicker:最初にハイライト

次のコードは動作しますが、私は日付を選択した場合、クラスはVaRの特急がチェックボックスで設定されている

$datepicker.datepicker({ 
     dayNamesMin: ["S", "M", "D", "M", "D", "F", "S"], 
     beforeShowDay:$.datepicker.noWeekends, 
     firstDay: 1, 
     minDate: d, 
     dateFormat: "dd.mm.yy", 
     onSelect: function (dateText, inst) { 

      $('.delivery-date').text(dateText); 

      var printReleaseDateParts =dateText.split('.'); 
      var printReleaseDate = new Date(printReleaseDateParts[2],printReleaseDateParts[1]-1,printReleaseDateParts[0]); 
      printReleaseDate.setDate(printReleaseDate.getDate() - printRelease); 
      $('.print-release-date').text($.datepicker.formatDate('dd.mm.yy', printReleaseDate)); 
      $datepicker.removeClass('express'); 
      if (express) { 
       $datepicker.addClass('express'); 
       $('*[data-handler="selectDay"]:lt(3)').addClass('express'); 
      } else { 
       $datepicker.removeClass('express'); 
       $('*[data-handler="selectDay"]:lt(3)').removeClass('express'); 

      } 

     }, 
     onChangeMonthYear: function(){ 
      console.log('onChangeMonthYear'); 

     } 
    }); 

削除されています。最終的に、チェックボックスをオンにすると、強調表示された納品期日を選択することができます。速達納期は通常開始の最初の選択可能日の3日前です。最初の選択可能日は、チェックボックスの変更により変更されます

$('input:checkbox[name=option-express]').change(function() { 
      if ($(this).prop("checked") == true) { 
       $datepicker.addClass('express'); 
       var d = calculateMinDate(deliveryExpress); 
       $datepicker.datepicker("option", "minDate", d); 
       $('*[data-handler="selectDay"]:lt(3)').addClass('express'); 

       express = true; 


      } else { 
       $datepicker.removeClass('express'); 
       var d = calculateMinDate(deliveryRegular); 
       $datepicker.datepicker("option", "minDate", d); 
       $('*[data-andler="selectDay"]:lt(3)').removeClass('express'); 

       express = false; 
      } 
     }); 

営業日のみ強調表示する必要があります。

最初の日を強調するベストプラクティスは何ですか?

EDIT:

今私はbeforeShowDayのカスタム機能が、運を実施しました。 console.logは4回発生しますが、クラスは追加されません。

var expressDates = ["08/29/2016", "08/30/2016", "08/31/2016", "09/01/2016"]; 
function expressDays(date) { 
      var noWeekend = $.datepicker.noWeekends(date); 
      if (noWeekend[0] && express) { 
       for (var i = 0; i < expressDates.length; i++) { 
        if (new Date(expressDates[i]).toString() == date.toString()) { 
         console.log('express day!') 
         return [true, 'express', 'Express']; 
        } 
       } 
       return [true, '']; 
      } else { 
       return noWeekend; 
      } 
     } 

答えて

0

大丈夫、私は自分自身でそれを理解しました。 beforeShowDayの関数を変更しました。明示的な日付を配列に入れ、$ .inArray()でチェックしてください。

function expressDays(date) { 
      var noWeekend = $.datepicker.noWeekends(date); 
      var expressDates = []; 
      for (var i = 0; i < deliveryExpress-1; i++) { 
       expressDates.push(moment($datepicker.datepicker("option", "minDate")).businessAdd(i).format('L')) 
      } 

      if (noWeekend[0] && express) { 
       var dateString = $.datepicker.formatDate('mm/dd/yy', date); 
       if($.inArray(dateString,expressDates) >=0){ 
        return [true, 'express', 'Express']; 
       }else{ 
        return [true, 'noexpress']; 
       } 
      } else { 
       return noWeekend; 
      } 
     }