Назначьте каждый <input>
type="number"
и min="0"
.
Затем max="23"
для часов и max="59"
для минут.
Добавление скрытого ввода с атрибутом name
.
Если вы этого еще не сделали, оберните все в <form>
и зарегистрируйте его в событии "input"
.
Создайте обработчик события извлечь и вычислить значения всех входов, а затем присвоить итоговое значение скрытому вводу.
Когда передано <form>
, скрытое значение ввода будет отправлено, так как оно имеет атрибут name
.
Кстати, на самом деле это не очень хороший пользовательский интерфейс, когда пользователь вводит столько значений в одном входе. Вы должны предоставить пользователю четко определенные поля, которые требуют от пользователя ввода данных без дополнительных сложностей.
Демо
document.forms.duration.oninput = toMinutes;
function toMinutes(e) {
const dur = this.elements;
let time;
if (e.target.tagName === 'INPUT') {
let d = Number(dur.days.value) * 1440;
let h = Number(dur.hours.value) * 60;
let m = Number(dur.minutes.value);
time = d + h + m;
dur.time.value = time;
}
console.log(dur.time.value);
}
:root,
body {
font: 400 3vw/1.45 Consolas
}
fieldset {
width: max-content;
}
label,
input {
width: 6.5ch;
display: inline-block;
margin: 4px;
}
input {
height: 3vw;
line-height: 1;
font: inherit;
text-align: right
}
.as-console-wrapper {
width: 40%;
min-height: 100%;
margin-left: 60%;
}
<form id='duration'>
<fieldset>
<legend>Duration</legend>
<label for='days'>Days: </label>
<input id='days' type='number' min='0' value='0'><br>
<label for='hours'>Hours: </label>
<input id='hours' type='number' min='0' max='23' value='0'><br>
<label for='minutes'>Minutes: </label>
<input id='minutes' type='number' min='0' max='59' value='0'><br>
</fieldset>
<input id='time' name='time' type='hidden'>
</form>