Javascript 在循环中创建Onchange函数
我在for循环中创建动态输入。每个输入都有自己的Javascript 在循环中创建Onchange函数,javascript,Javascript,我在for循环中创建动态输入。每个输入都有自己的onchange函数,用于检查其值是否大于数组值。在每个onchange函数中,arrId变量总是6,它是数组中的最后一个元素 有没有可能使它正确?如果假设我更改第一个输入,arrId应该是数组中的第一个元素,而不是最后一个元素。但是arrId始终是数组中的最后一个元素 var arr=[“22”、“12”、“15”、“6”]; 对于(变量i=0;iparseInt(arrId)){ x、 target.value=arrId; } } docu
onchange
函数,用于检查其值是否大于数组值。在每个onchange
函数中,arrId
变量总是6
,它是数组中的最后一个元素
有没有可能使它正确?如果假设我更改第一个输入,arrId
应该是数组中的第一个元素,而不是最后一个元素。但是arrId
始终是数组中的最后一个元素
var arr=[“22”、“12”、“15”、“6”];
对于(变量i=0;iparseInt(arrId)){
x、 target.value=arrId;
}
}
document.getElementById(“输入”).appendChild(输入);
}
输入{
显示:块;
利润率:10px0;
}
它总是显示i的最后一个值,因为6是最后一个值,所以您在更改时调用的函数将只记住其作用域中的最后一个值,为了解决它,您需要创建一个新的作用域,以便该函数记住您可以使用的当前值
var arr=[“22”、“12”、“15”、“6”];
对于(变量i=0;iparseInt(arrId)){
x、 target.value=arrId;
}
}
})(arrId,输入);
document.getElementById(“输入”).appendChild(输入);
}
输入{
显示:块;
利润率:10px0;
}
要点:JavaScript没有块作用域。块中引入的变量的作用域是包含函数或脚本的,设置这些变量的效果将持续到块本身之外。换句话说,block语句不引入作用域。尽管“独立”块是有效的语法,但您不希望在JavaScript中使用独立块,因为如果您认为它们做的事情与C或Java中的类似,它们不会做您认为它们做的事情
var arr=[“22”、“12”、“15”、“6”];
var输入=document.createElement(“输入”);
input.value=0;
input.type=“number”;
对于(变量i=0;iparseInt(arrId)){
x、 target.value=arrId;
}
})(arr[i],输入)
}
document.getElementById(“输入”).appendChild(输入);
}
var arrId=arr[i]
tolet arrId=arr[i]代码>或让arrId=arr[i]代码>我不能使用let
。它说当前的JavaScript版本不支持Let定义。
我从5.1切换到了6。谢谢你的评论<代码>让
解决这个问题。但在这种情况下,我为什么要使用let?
var arr = ["22", "12", "15", "6"];
var input = document.createElement("input");
input.value = 0;
input.type = "number";
for (var i = 0; i < arr.length; i++) {
(function(val){
var arrId = val;
var input = document.createElement("input");
input.value = 0;
input.type = "number";
input.onchange = function(x) {
console.log(x.target.value + " " + arrId);
if (parseInt(x.target.value) > parseInt(arrId)) {
x.target.value = arrId;
}
})(arr[i],input)
}
document.getElementById("inputs").appendChild(input);
}