rework enforceInputRange
* enforce only in onchange * notify on valid input immediately * highlight invalid values
This commit is contained in:
parent
3389812766
commit
c09ee38c9e
13
dom.js
13
dom.js
|
@ -53,13 +53,16 @@ function animateElement(element, {className, remove = false}) {
|
||||||
function enforceInputRange(element) {
|
function enforceInputRange(element) {
|
||||||
const min = Number(element.min);
|
const min = Number(element.min);
|
||||||
const max = Number(element.max);
|
const max = Number(element.max);
|
||||||
const onChange = () => {
|
const doNotify = () => element.dispatchEvent(new Event('change', {bubbles: true}));
|
||||||
const value = Number(element.value);
|
const onChange = ({type}) => {
|
||||||
if (value < min || value > max) {
|
if (type == 'input' && element.checkValidity()) {
|
||||||
element.value = Math.max(min, Math.min(max, value));
|
doNotify();
|
||||||
|
} else if (type == 'change' && !element.checkValidity()) {
|
||||||
|
element.value = Math.max(min, Math.min(max, Number(element.value)));
|
||||||
|
doNotify();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
onChange();
|
onChange({});
|
||||||
element.addEventListener('change', onChange);
|
element.addEventListener('change', onChange);
|
||||||
element.addEventListener('input', onChange);
|
element.addEventListener('input', onChange);
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,6 +58,11 @@ input[type=number] {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
input[type=number]:invalid {
|
||||||
|
background-color: rgba(255, 0, 0, 0.1);
|
||||||
|
color: darkred;
|
||||||
|
}
|
||||||
|
|
||||||
#actions {
|
#actions {
|
||||||
margin-top: -2em;
|
margin-top: -2em;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user