Неперехваченная синтаксическая ошибка: недопустимая левая сторона при назначении в jQuery UI Datepicker

#jquery #jquery-ui-datepicker

#jquery #jquery-ui-datepicker

Вопрос:

Я использую jQuery-UI datepicker, как показано ниже:

 < script type = "text/javascript" >
  var holidayDays = [];
  var weekendInclusives;
  var holidayInclusives;
$(document).ready(function() {
  $(document).on('change', '#leave_type', function() {
    var air_id = $(this).val();

    var a = $(this).parent();

    var op = "";

    $.ajax({
      type: 'get',
      url: '{{ route('
      get.leavecounts.all ') }}',
      data: {
        'id': air_id
      },
      dataType: 'json', //return data will be json
      // console.log("Its Change !");
      success: function(data) {
        $('#weekendinclusive').val(data.weekendinclusive);
        $('#holidayinclusive').val(data.holidayinclusive);
        holidayDays = data.nationalholidays;
        weekendInclusives = parseInt($("#weekendinclusive").val());
        holidayInclusives = parseInt($("#holidayinclusive").val());
      },
      error: function() {

      }
    });
  });
}); <
/script>  

Затем я попытался использовать операторы if на основе значений функций:

 < script type = "text/javascript" >
  $(document).ready(function() {
     var holidayInclusives = $('#holidayinclusive').val();
     var weekendInclusives = $('#weekendinclusive').val(); 
    $("#leave_days").on('keyup blur', function(e) {
      var periodval = parseInt($("#leave_days").val());
      holidayDays = holidayDays;
      var startDate = $('.commencement_date');
      var endDate = $('.resumption_date');

      var dte = startDate.datepicker("getDate");
      dte.setDate(dte.getDate()   periodval);
      endDate.datepicker("setDate", dte);
    });

    function noWeekendsAndHolidays(date) {
      var ymd = date.getFullYear()   "-"   (date.getMonth()   1)   "-"   date.getDate();
      //if u have to disable a list of day
      var removeDays = holidayDays;
      console.log(ymd);
      if ($.inArray(ymd, removeDays) >= 0) {
        return [false];
      } else {
        //Show accept sundays
        var day = date.getDay();
        return [(day == 1 || day == 2 || day == 3 || day == 4 || day == 5)];
      }
    }

    function noHolidays(date) {
      var ymd = date.getFullYear()   "-"   (date.getMonth()   1)   "-"   date.getDate();
      //if u have to disable a list of day
      var removeDays = holidayDays;
      console.log(ymd);
      if ($.inArray(ymd, removeDays) >= 0) {
        return [false];
      }
    }

$('.commencement_date').datepicker({
    dateFormat: 'dd-mm-yy',
    changeMonth: true,
    changeYear: true,
    showAnim: 'slideDown',
    duration: 'fast',
    minDate: 1,
    setDate: new Date(),
    yearRange: new Date().getFullYear()   ':'   new Date().getFullYear(),
    beforeShowDay: function(date) {
        if (weekendInclusives == 0 amp;amp; holidayInclusives == 0) {
            return noWeekendsAndHolidays(date);
        }
        else if (weekendInclusives == 0 amp;amp; holidayInclusives == 1) {
            return noHolidays(date);
        }
        else if (weekendInclusives == 1 amp;amp; holidayInclusives == 0) {
            return $.datepicker.noWeekends(date);
        }
    }
});

    $('.resumption_date').datepicker({
      dateFormat: 'dd-mm-yy',
      changeMonth: true,
      changeYear: true,
      showAnim: 'slideDown',
      duration: 'fast',
      minDate:  1,
      beforeShowDay: $.datepicker.noWeekends,
      yearRange: new Date().getFullYear()   ':'   new Date().getFullYear(),
      enableOnReadonly: true,
      beforeShow: function(i) {
        if ($(i).attr('readonly')) {
          return false;
        }
      }
      // disabled: true,
      // beforeShowDay: $.datepicker.noWeekends
    });
  }); <
/script>  

Затем я получил эту ошибку:

создать:990 Неперехваченная синтаксическая ошибка: недопустимая левая сторона при назначении

и он указывает на:

   if (weekendInclusives = 0 amp;amp; holidayInclusives = 0) {
    beforeShowDay: noWeekendsAndHolidays;
  }
  else if (weekendInclusives = 0 amp;amp; holidayInclusives = 1) {
    beforeShowDay: noHolidays;
  }
  else if (weekendInclusives = 1 amp;amp; holidayInclusives = 0) {
    beforeShowDay: $.datepicker.noWeekends;
  },
  

Когда я изменил ‘=’ на ‘==’, ошибка изменилась на:

Неперехваченная синтаксическая ошибка: неожиданный токен ‘==’

Как мне решить эту проблему?

Спасибо

Комментарии:

1. Где находится строка кода, о которой идет речь?

2. @FSDford — это оператор IF внутри этого datepicker: $(‘.commencement_date’).datepicker({

3. У вас не может быть if / else внутри такого объявления объекта.

4. @RocketHazmat — Что мне делать? И какова альтернатива?

Ответ №1:

Вы не можете использовать if операторы внутри объявления объекта подобным образом. Вам нужно будет создать объект как собственную переменную, затем вы можете использовать свой if для установки свойств. Затем вы можете передать этот объект datepicker() .

 let dateOpts = {
    dateFormat: 'dd-mm-yy',
    changeMonth: true,
    changeYear: true,
    showAnim: 'slideDown',
    duration: 'fast',
    minDate: 1,
    setDate: new Date(),
    yearRange: new Date().getFullYear()   ':'   new Date().getFullYear(),
};

if (weekendInclusives == 0 amp;amp; holidayInclusives == 0) {
    dateOpts.beforeShowDay = noWeekendsAndHolidays;
}
else if (weekendInclusives == 0 amp;amp; holidayInclusives == 1) {
    dateOpts.beforeShowDay = noHolidays;
}
else if (weekendInclusives == 1 amp;amp; holidayInclusives == 0) {
    dateOpts.beforeShowDay = $.datepicker.noWeekends;
}

$('.commencement_date').datepicker(dateOpts);
  

ОБНОВЛЕНИЕ: если вы хотите обновить datepicker при weekendInclusives holidayInclusives обновлении переменных or, вам нужно будет beforeShowDay проверить это.

 $('.commencement_date').datepicker({
    dateFormat: 'dd-mm-yy',
    changeMonth: true,
    changeYear: true,
    showAnim: 'slideDown',
    duration: 'fast',
    minDate: 1,
    setDate: new Date(),
    yearRange: new Date().getFullYear()   ':'   new Date().getFullYear(),
    beforeShowDay: function(date) {
        if (weekendInclusives == 0 amp;amp; holidayInclusives == 0) {
            return noWeekendsAndHolidays(date);
        }
        else if (weekendInclusives == 0 amp;amp; holidayInclusives == 1) {
            return noHolidays(date);
        }
        else if (weekendInclusives == 1 amp;amp; holidayInclusives == 0) {
            return $.datepicker.noWeekends(date);
        }
    }
});
  

Комментарии:

1. @RocketHamzat — Я получил эту ошибку: неперехваченная синтаксическая ошибка: неожиданный токен ‘}’. Но когда я удаляю оператор IF, ошибка исчезает. Что я делаю?

2. @user11352561 Вероятно, у вас синтаксическая ошибка в другом месте. Вам нужно будет проверить остальную часть вашего кода, возможно, у вас где-то отсутствует } или ; или что-то еще.

3. @user11352561 Этот код запускается при загрузке страницы и настраивает datepicker на основе любых значений, которые были установлены в этот момент времени. Теперь этот код выполнен. При запуске вашего события изменения переменные ( weekendInclusives и holidayInclusives ) могут обновляться, но datepicker этого не знает, он уже настроен.

4. @user11352561 То, что вы, вероятно, хотите, это установить dateOpts.beforeShowDay для функции, которая проверяет переменные. Что-то вроде: dateOpts.beforeShowDay = function(date) { if (weekendInclusives == 0 amp;amp; holidayInclusives == 0) { return noWeekendsAndHolidays(date); }}; .

5. @user11352561 Они должны быть объявлены вне функции (и вне события). Сразу после $(document).ready() того, как должно сработать. $(document).ready(function() { var weekendInclusives = 0, holidayInclusives = 0; }) .