Here is the code I have so far and the limiting functions that I want the input for to reject
- a step value of 0.1 ie no value smaller than 0.1 ie 0.01
- no characters ie w,r,t
- a min value set by the function input ie 1
- a max value set by the function input ie 5
- please note the way I have written the rest of my code the type of the input form can not be ="number" it must be ="text"
any help would be greatly appreciated
function myFunction(e, low, high) {
console.log("called");
console.log("low" low);
console.log("high" high);
console.log(e.target.value e.key);
var charValue = String.fromCharCode(e.keyCode);
var nextValue = e.target.value e.key;
if (((!/^(\d )?([.]?\d{0,1})?$/.test(e.target.value e.key)) && (e.which != 8)) && (nextValue < 1 || nextValue > 5)) {
e.preventDefault()
}
}
<!DOCTYPE html>
<html>
<form name="addtext">
SetPoint :<input id="setPoint" type="text" name="setPoint" onkeydown="myFunction(event,3, 5)" /><br />
</form>
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>
CodePudding user response:
Unless you're playing Code Golf, there are no prizes for cramming all the logic into a single condition.
Split the condition into multiple if
statements so you can implement your logic clearly.
You need to replace the hard-coded 1
and 5
with low
and high
.
function myFunction(e, low, high) {
console.log("called");
console.log("low" low);
console.log("high" high);
var nextValue = e.target.value e.key;
console.log(nextValue);
if (e.which == 8) { // allow backspace
return;
}
if (!/^(\d )?([.]?\d{0,1})?$/.test(nextValue)) {
e.preventDefault(); // non-number, don't allow
}
if (nextValue < low || nextValue > high) {
e.preventDefault();
}
}
<!DOCTYPE html>
<html>
<form name="addtext">
SetPoint :<input id="setPoint" type="text" name="setPoint" onkeydown="myFunction(event,3, 5)" /><br />
</form>
<iframe name="sif2" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>
CodePudding user response:
Or, you could use an input that is made for this. No javascript required.
<input id="range" value="1" type="range" step="0.1" min="0.1" max="5.0">
<iframe name="sif3" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>