숫자로 설정된 유형의 간단한 입력 필드가 있습니다. [0,255] 범위 (RGB)의 입력을 입력하는 데 사용됩니다.엄격한 숫자 입력 필드
<input type="number" id="inputBox" min="0" max="255" step="1" />
현재의 형태에서,이 입력 필드는 다음의 값을 수용한다 :
012 // zero prefixed numbers
1.0 // floating-point
.1 // floating-point
-5 // range underflow
300 // range overflow
난은 [0,255] 범위의 단지 정수를 수락 할. 따라서 접두사가 없으며 부동 소수점 숫자도 없습니다. (.
을 허용하지 않음으로써) keydown
이벤트를 사용
inputBox.addEventListener("input", function() {
if (this.validity.rangeUnderflow) {
this.value = this.min;
}
else if (this.validity.rangeOverflow) {
this.value = this.max;
}
});
및 부동 소수점 문제 :
inputBox.addEventListener("keydown", function (e) {
if (!isFloat(this.step)) {
if (e.key == ".") {
e.preventDefault();
}
}
});
function isFloat(f) {
var f = parseFloat(f);
var floor = Math.floor(f);
var fraction = f - floor;
if (fraction > 0) {
return true;
}
return false;
}
내가 해결에 붙어있어
나는 input
이벤트를 사용하여 범위 문제를 해결했습니다 제로 접두 번호 문제. 나는 제로 접두사 잘 작동
this.value = this.valueAsNumber; // or parseInt(this.value, 10)
하지만 휴식 이런 종류의 입력 필드의 기능을 제거하기 위해 input
이벤트에 다음 코드 줄을 사용할 수 있습니다. E
표기법으로 값을 입력 할 수 없습니다. 내 경우에는 할 필요가 없지만 어딘가에있을 수 있습니다. 1e
을 입력하면 바로 NaN
으로 평가되고 입력 필드에 다시 지정됩니다.
두 가지 방법을 모두 사용할 수있는 방법이 있습니까?
'으로 접두어가 0 인 모든 요구 사항을 얻을 수 있습니다. –
왜 1e가 필요합니까? 두 개의 별개의 문제처럼 나에게 들린다. 0-255 만 허용하는 1 개의 입력과 '1e'를 지원하는 다른 입력이 필요합니다. 그러나, 나는 RGB 입력이'1e'와 같은 것을 받아들이 길 원할 것이라고 생각하지 않는다. 맞습니까? – KevBot
@KevBot 지수 값을 사용해야하는 다른 프로젝트에서이 기능을 사용하려면이 문제가 다시 발생합니다. 그럼 지금 왜 그것을 무시합니까? – akinuri