我有一個類型設置爲數字的簡單輸入字段。這將用於在[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]範圍內的整數。所以,沒有零前綴,沒有浮點數字。
我已經解決了使用input
事件的範圍問題:使用事件(不容許.
)
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)
這是工作的罰款,但這種斷裂的輸入字段的功能。我無法使用E
表示法輸入值。就我而言,我不需要,但我可能會在其他地方。只要我輸入1e
,它就會評估爲NaN
,並被分配回輸入字段。
有沒有辦法使這兩個工作?
除了零前綴數字之外的所有要求都可以通過'' –
爲什麼你需要1e?聽起來像是兩個不同的問題。你需要1個輸入,只允許0-255,另一個輸入支持'1e'。但是,我不認爲你會想要一個RGB輸入來接受像'1e'這樣的東西,對吧? – KevBot
@KevBot如果我想在另一個需要使用指數值的項目中使用這個功能,我會再次面對這個問題。那麼爲什麼現在忽略它呢? – akinuri