Как отключить/включить кнопку отправки на основе даты, выбранной Datepicker?

У меня есть простая форма, которая содержит одну кнопку отправки и 2 ввода текста, которые вызывают «дата1» и «дата2», и оба используют Плагин DatePicker Gijgo (https://gijgo.com/datepicker) для выбора даты.

Я хотел бы отключить кнопку отправки, если я выберу дату из «дата2», которая меньше сегодняшнего дня, и включить кнопку отправки, если я выберу дату из «данные2», которая больше/равна сегодня.

Прежде чем опубликовать здесь, я изучил темы ниже, но не нашел правильного способа решить эту проблему:

  1. JQuery Datepicker OnSelect и проблема TextChanged
  2. Активировать кнопку, когда два поля выбора даты имеют значения
  3. jQuery отключить или включить кнопку отправки на основе дат

Ниже приведен код, над которым я работаю:

1. Скрипты CDN

<!-- BOOTSTRAP CSS CDN -->

<link rel = "stylesheet" href = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
<link rel = "stylesheet" href = "https://use.fontawesome.com/releases/v5.8.1/css/all.css" />

<!-- BOOTSTRAP SCRIPT CDN -->

<script src = "https://code.jquery.com/jquery-3.4.0.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>

<!-- DATEPICKER SCRIPT CDN -->

<script src = "https://unpkg.com/[email protected]/js/gijgo.min.js" type = "text/javascript"></script>
<link href = "https://unpkg.com/[email protected]/css/gijgo.min.css" rel = "stylesheet" type = "text/css" />

2. HTML-код формы

<div class = "container" style = "max-width:507px;">
<br>
<form method = "post" id = "date_form" enctype = "multipart/form-data">

<div class = "form-row">

<div class = "col-md-6 mb-3">
<label align = "left"><b>Date 1</b></label>
<input type = "text" name = "date1" id = "date1" class = "form-control"/>

</div>

<div class = "col-md-6 mb-3">
<label align = "left"><b>Date 2</b></label>
<input type = "text" name = "date2" id = "date2" class = "form-control"/>

</div>

</div>

</form>

<div class = "form-footer">
<input type = "submit" id = "btnSubmit" name = "btnSubmit" class = "btn btn-success" value = "SUBMIT" disabled/>
</div>
</div>
  1. Сценарий DatePicker, который отключает старую дату из «дата2» до даты, выбранной в «дата1»:

<!-- DATEPICKER SCRIPT -->

<script>

var today = new Date();
        $('#date1').datepicker({
            format: 'dd/mm/yyyy',
            uiLibrary: 'bootstrap4',
            iconsLibrary: 'fontawesome',
            maxDate: function () {
                return $('#date2').val();
            }
        });
        $('#date2').datepicker({
            format: 'dd/mm/yyyy',
            uiLibrary: 'bootstrap4',
            iconsLibrary: 'fontawesome',
            minDate: function () {
                return $('#date1').val();
            }
        });

</script>

4. И, наконец, код, который я пытаюсь применить, чтобы отключить кнопку отправки, когда я выбрал дату из «date2», которая меньше (<), чем сегодня, но, к сожалению, это не работает:

<!-- SCRIPT TO DISABLE SUBMIT BUTTON IF ***date2*** IS LESS THAN TODAY -->

<script>

$('#date2').datepicker({
    dateFormat: 'dd/mm/yyyy',
    onSelect: function(dateText){
        var date2 = $('#date2').val();
            var curDate = new Date();
            if (date2 < curDate){
$("#btnSubmit").attr("disabled", true);
            }else{
$("#btnSubmit").attr("disabled", false);
            }
        }
});
</script>

В этом случае, как я могу изменить этот скрипт выше, чтобы отключить кнопку отправки, когда я каждый раз выбираю дату из «дата2», которая меньше, чем сегодня, и включать кнопку отправки, когда я выбираю дату из «дата2», которая больше/равна сегодня?

Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
0
0
4 097
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы не можете напрямую сравнивать даты. Дата должна быть отформатирована / проанализирована точно в мм, дд, гггг, а затем вам нужно конкретно проверить условия для даты и года.

Также вам не нужно использовать средство выбора даты два раза на одном и том же селекторе.

Пожалуйста, найдите приведенный ниже сценарий. Я проверил это в плункере, и дата 2 точно отформатирована и проверена, а также кнопка отправки работает, как и ожидалось. также вам нужно использовать «изменить», а не «onSelect»

<script>

        $('#date1').datepicker({
            format: 'dd/mm/yyyy',
            uiLibrary: 'bootstrap4',
            iconsLibrary: 'fontawesome',
            maxDate: function () {
                return $('#date2').val();
            }
        });


        $('#date2').datepicker({
          dateFormat: 'dd/mm/yyyy',
          format: 'dd/mm/yyyy',
                  uiLibrary: 'bootstrap4',
                  iconsLibrary: 'fontawesome',
                  minDate: function () {
                      return $('#date1').val();
                  },
          change: function(dateText){

              var date2 = $('#date2').val();
              var curDate = new Date();

              var cur_dd = curDate.getDate();
              var cur_mm = curDate.getMonth() + 1; //January is 0!

              var cur_yyyy = parseInt(curDate.getFullYear());
              if (cur_dd < 10) {
                cur_dd = parseInt('0' + cur_dd);
              } 
              if (cur_mm < 10) {
                cur_mm = parseInt('0' + cur_mm);
              } 
              curDate = cur_dd + '/' + cur_mm + '/' + cur_yyyy;

              var date2Arr = date2.split('/');
              var date2_dd = date2Arr[0];
              var date2_mm = date2Arr[1]; 
              var date2_yyyy = parseInt(date2Arr[2]);


              if (date2_dd < 10) {
                date2_dd = parseInt('0' + date2_dd);
              } 
              if (date2_mm < 10) {
                date2_mm = parseInt('0' + date2_mm);
              } 
              date2 = date2_dd + '/' + date2_mm + '/' + date2_yyyy;

              if (date2_yyyy < cur_yyyy){
                $("#btnSubmit").attr("disabled", true);
              } else if (date2_yyyy === cur_yyyy && date2_mm <= cur_mm && date2_dd < cur_dd ) {
                $("#btnSubmit").prop("disabled", true);
              } else{
                $("#btnSubmit").prop("disabled", false);
              }
          }

        });
</script>

URL плунжера: https://plnkr.co/edit/brCcHutewGoZe2a1cdjl?p=preview

Ответ принят как подходящий

Используйте событие change, чтобы зафиксировать установленную дату и сравнить ее с текущим временем. Затем установите отключенное состояние кнопки на основе сравнения.

.....
change: function(e) {
    //get date in yyyy/mm/dd format
    var vl = $(this).val().split('/').reverse().join('/');
    //getTime to compare with current timestamp
    var ds = new Date(vl).getTime();
    //current timestamp
    var dn = e.timeStamp;
    $('#btnSubmit').prop('disabled', ds<dn);
}
....

        $('#date1').datepicker({
            format: 'dd/mm/yyyy',
            uiLibrary: 'bootstrap4',
            iconsLibrary: 'fontawesome',
            maxDate: function () {
                return $('#date2').val();
            }
        });
        $('#date2').datepicker({
            format: 'dd/mm/yyyy',
            uiLibrary: 'bootstrap4',
            iconsLibrary: 'fontawesome',
            minDate: function () {
                return $('#date1').val();
            },
            change: function(e) {
              //get date in yyyy/mm/dd format
              var vl = $(this).val().split('/').reverse().join('/');
              //getTime to compare with current timestamp
              var ds = new Date(vl).getTime();
              //current timestamp
              var dn = e.timeStamp;
              $('#btnSubmit').prop('disabled', ds<dn);
            }
        });
<!-- BOOTSTRAP CSS CDN -->

<link rel = "stylesheet" href = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
<link rel = "stylesheet" href = "https://use.fontawesome.com/releases/v5.8.1/css/all.css" />

<!-- BOOTSTRAP SCRIPT CDN -->

<script src = "https://code.jquery.com/jquery-3.4.0.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>

<!-- DATEPICKER SCRIPT CDN -->

<script src = "https://unpkg.com/[email protected]/js/gijgo.min.js" type = "text/javascript"></script>
<link href = "https://unpkg.com/[email protected]/css/gijgo.min.css" rel = "stylesheet" type = "text/css" />
<div class = "container" style = "max-width:507px;">
<br>
<form method = "post" id = "date_form" enctype = "multipart/form-data">

<div class = "form-row">

<div class = "col-md-6 mb-3">
<label align = "left"><b>Date 1</b></label>
<input type = "text" name = "date1" id = "date1" class = "form-control"/>

</div>

<div class = "col-md-6 mb-3">
<label align = "left"><b>Date 2</b></label>
<input type = "text" name = "date2" id = "date2" class = "form-control"/>

</div>

</div>

</form>

<div class = "form-footer">
<input type = "submit" id = "btnSubmit" name = "btnSubmit" class = "btn btn-success" value = "SUBMIT"/>
</div>
</div>

Другие вопросы по теме