在for循环(即.each())中,如果满足某个条件,则需要将openvalue的变量设置为1。然后,我需要在循环结束时访问该变量的值。无论何种情况,当我将变量打印到控制台时,结果始终为0。我知道为什么(变量作用域),但我想知道如何修改我的代码,以便如果在forloop中将openvalue设置为1,那么该值在forloop之外将具有持久性。
var openvalue = 0; //sets default value
textinputs.each(function () {
var attr = $(this).attr('disabled');
if (attr == undefined || attr == false) {
var openvalue = 1; // if there is an input that is not disabled, set this value to 1
}
});
console.log(openvalue);谢谢你的帮忙!
发布于 2020-02-20 11:49:58
在您的循环中,使用相同的名称声明一个新变量。相反,您希望为已声明的变量赋值。因此,"openvalue = 1“而不是"var openvalue = 1":
var openvalue = 0; //sets default value
textinputs.each(function () {
var attr = $(this).attr('disabled');
if (attr == undefined || attr == false) {
openvalue = 1; // if there is an input that is not disabled, set this value to 1
}
});
console.log(openvalue);发布于 2020-02-20 11:51:10
这个问题之所以存在,是因为您使用var语句重新声明了openvalue变量,这将在新函数范围内创建第二个openvalue变量。下面是您的代码片段:
var openvalue = 0; //sets default value
var textinputs = $('input');
textinputs.each(function () {
var attr = $(this).attr('disabled');
if (attr == undefined || attr == false) {
var openvalue = 1; // if there is an input that is not disabled, set this value to 1
}
});
console.log(openvalue);<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input />
<input disabled />
<input />
在我们的解决方案中,我们省略了第二个声明,只是引用了父作用域中的原始openvalue,我们得到了预期的行为:
var openvalue = 0; //sets default value
var textinputs = $('input');
textinputs.each(function () {
var attr = $(this).attr('disabled');
if (attr == undefined || attr == false) {
openvalue = 1; // if there is an input that is not disabled, set this value to 1
}
});
console.log(openvalue);<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input />
<input disabled />
<input />
https://stackoverflow.com/questions/60312591
复制相似问题