我使用onkeyup()从表单输入中获取值和ID。如果该值在0到4之间,则要将其添加到数组中。但是,似乎我的函数将值添加到数组中,无论它们在0到4之间,尽管我希望仅当值在0到4之间时才将值添加到数组。
以下是输入:
<input type="number" class="form-control" id=0 onkeyup="a(this)" mix="0" max="4">
<input type="number" class="form-control" id=1 onkeyup="a(this)" mix="0" max="4">
.
.
这是我的功能:
function a(c){
var dps = [];
var id = c.id;
var valueStr = c.value;
var value = parseInt(valueStr)
if (0 <= value <= 4) {
dps[id]=value;
console.log("id: ",id);
console.log("value: ", value);
console.log("length of array: ",dps.length);
console.log("type of value: ", typeof value);
}
}
我在这里在Jsfiddle上重新创建了它: https://jsfiddle.net/89az7u4n/
答案 0 :(得分:5)
您通常在数学中写不等式的方式不同于我们通常在大多数编程语言中编写比较式的方式。
if (0 <= value <= 4)
并不表示“如果该值介于0到4之间”。解析器将其视为(0 <= value) <= 4
,其结果将为false <= 4
或true <= 4
,而两者都将得出true
。
将您的if
语句更改为此:
if (0 <= value && value <= 4) {
...
}
其中&&
是logical AND运算符。
答案 1 :(得分:2)
也许您应该将条件分成两个这样的语句:
if (0 <= value && value <= 4) {
相反?
答案 2 :(得分:1)
mix="0"
更改为min="0"
。&&
中使用if condition
( AND运算符),如 @pswg 的答案所示和说明。< / li>
如果两个输入都彼此相邻,则只需将它们包装在一个公共div中,然后使用querySelectorAll()方法将它们定位为目标,然后使用forEach()方法添加一个{{1} }监听这两个输入,这两个输入将在调用事件时运行检查输入值的函数。
检查并运行以下代码段,以获取上述内容的实际示例:
keyup
/* JavaScript */
const inputVal = document.querySelectorAll("#someDiv input");
let dps = [];
inputVal.forEach(input => input.addEventListener("keyup", function(){
let value = parseInt(input.value);
if (value >= 0 && value <= 4){
dps[input.id] = value;
console.log(dps);
}
}));
如果输入元素彼此不相邻,只需使用getElementById()方法分别将它们作为目标,然后向两个输入添加一个<!-- HTML -->
<div id="someDiv">
<input type="number" class="form-control" id="0" min="0" max="4">
<input type="number" class="form-control" id="1" min="0" max="4">
</div>
侦听器即可运行检查输入值的功能调用事件时。
检查并运行以下代码段,以获取上述内容的实际示例:
keyup
/* JavaScript */
const inputVal1 = document.getElementById("0");
const inputVal2 = document.getElementById("1");
let dps = [];
function checkVal(){
let value = parseInt(this.value);
if (value >= 0 && value <= 4){
dps[this.id] = value;
console.log(dps);
}
}
inputVal1.addEventListener("keyup", checkVal);
inputVal2.addEventListener("keyup", checkVal);