У меня есть простая форма, которая содержит одну кнопку отправки и 2 ввода текста, которые вызывают «дата1» и «дата2», и оба используют Плагин DatePicker Gijgo (https://gijgo.com/datepicker) для выбора даты.
Я хотел бы отключить кнопку отправки, если я выберу дату из «дата2», которая меньше сегодняшнего дня, и включить кнопку отправки, если я выберу дату из «данные2», которая больше/равна сегодня.
Прежде чем опубликовать здесь, я изучил темы ниже, но не нашел правильного способа решить эту проблему:
Ниже приведен код, над которым я работаю:
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>
<!-- 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», которая больше/равна сегодня?
Вы не можете напрямую сравнивать даты. Дата должна быть отформатирована / проанализирована точно в мм, дд, гггг, а затем вам нужно конкретно проверить условия для даты и года.
Также вам не нужно использовать средство выбора даты два раза на одном и том же селекторе.
Пожалуйста, найдите приведенный ниже сценарий. Я проверил это в плункере, и дата 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>