Javascript 未检测到数组中值的更改
以下是我的js代码:Javascript 未检测到数组中值的更改,javascript,jquery,arrays,variables,button,Javascript,Jquery,Arrays,Variables,Button,以下是我的js代码: // at first the three buttons have value 1 var clicks = [1,1,1]; // if (at least one button has value 2) {"button-next" = enabled} if (clicks.some(x => x == 1)) { document.getElementById("button-next").disabled
// at first the three buttons have value 1
var clicks = [1,1,1];
// if (at least one button has value 2) {"button-next" = enabled}
if (clicks.some(x => x == 1)) {
document.getElementById("button-next").disabled = true;
} else {
document.getElementById("button-next").disabled = false;
}
如果三个值中至少有一个为2
,则必须启用按钮next
使用jQuery,我成功地在第一次单击时将变量更改为
2
(不透明度更改为1
),在第二次单击时将变量更改为1
(不透明度更改为0.5
):
当我单击某个按钮时,值发生变化,但下一步的按钮仍处于禁用状态。看起来没有检测到更改。我尝试手动更改它,如下所示:
var clicks = [1,2,1];
我证明了这些路线是可行的:
if (clicks.some(x => x == 1)) {
document.getElementById("button-next").disabled = true;
} else {
document.getElementById("button-next").disabled = false;
}
因为在这一点上,按钮next
被重新启用。我不知道怎么修理它。你有什么想法吗?看起来你可以通过一些css和javascript一起完成这一切。除非您有其他特定于每个按钮的代码(不在示例中),否则您可以尝试以下操作:
var clicks = [1,2,1];
函数updateNextBtn(){
如果($('.btn已单击')。长度===0){
$(“#按钮下一步”).attr('disabled','disabled');
}否则{
$(“#按钮下一步”).removeAttr('disabled');
}
};
$(文档).ready(函数(){
//按钮1
$(“.btn”)。单击(函数(){
//添加或删除btn单击的类
$(this.toggleClass('btn-clicked');
updateNextBtn();
});
});代码>
.btn{
不透明度:0.5;
}
.btn.btn已单击{
不透明度:1.0;
}
地下一层
地下二层
地下三层
接下来
看起来您可以通过一些css和javascript一起完成这一切。除非您有其他特定于每个按钮的代码(不在示例中),否则您可以尝试以下操作:
var clicks = [1,2,1];
函数updateNextBtn(){
如果($('.btn已单击')。长度===0){
$(“#按钮下一步”).attr('disabled','disabled');
}否则{
$(“#按钮下一步”).removeAttr('disabled');
}
};
$(文档).ready(函数(){
//按钮1
$(“.btn”)。单击(函数(){
//添加或删除btn单击的类
$(this.toggleClass('btn-clicked');
updateNextBtn();
});
});代码>
.btn{
不透明度:0.5;
}
.btn.btn已单击{
不透明度:1.0;
}
地下一层
地下二层
地下三层
接下来
代码段中的条件实际上与您声明的条件不一致:
如果三个值中至少有一个为2,则必须启用“下一步”按钮
.some()
不会返回false
,直到谓词为每个元素返回false
为了匹配您所述的条件,代码应比较x==2
,并交换设置的禁用值,因为条件现在已反转:
if (clicks.some(x => x == 2)) {
document.getElementById("button-next").disabled = false;
} else {
document.getElementById("button-next").disabled = true;
}
不过,更简单的更改可能是使用.every()
而不是.some()
当所有的点击
都是1
时,按钮next
被禁用
简要介绍每一项:
[1, 1, 1].some(x => x == 1) // true (all are 1)
[1, 2, 1].some(x => x == 1) // true (1st and 3rd are 1, that's still some)
[2, 2, 2].some(x => x == 1) // false (none are 1)
[1, 1, 1].some(x => x == 2) // false (none are 2)
[1, 2, 1].some(x => x == 2) // true (2nd is 2)
[2, 2, 2].some(x => x == 2) // true (all are 2)
[1, 1, 1].every(x => x == 1) // true (all are 1)
[1, 2, 1].every(x => x == 1) // false (2nd is not 1)
[2, 2, 2].every(x => x == 1) // false (none are 1)
旁注
由于.some()
和已经提供了一个布尔值,因此可以通过删除if..else
来缩短代码段
以下是上述每个代码段的等效代码:
document.getElementById("button-next").disabled = !clicks.some(x => x == 2);
代码段中的条件实际上与您声明的条件不一致:
如果三个值中至少有一个为2,则必须启用“下一步”按钮
.some()
不会返回false
,直到谓词为每个元素返回false
为了匹配您所述的条件,代码应比较x==2
,并交换设置的禁用值,因为条件现在已反转:
if (clicks.some(x => x == 2)) {
document.getElementById("button-next").disabled = false;
} else {
document.getElementById("button-next").disabled = true;
}
不过,更简单的更改可能是使用.every()
而不是.some()
当所有的点击
都是1
时,按钮next
被禁用
简要介绍每一项:
[1, 1, 1].some(x => x == 1) // true (all are 1)
[1, 2, 1].some(x => x == 1) // true (1st and 3rd are 1, that's still some)
[2, 2, 2].some(x => x == 1) // false (none are 1)
[1, 1, 1].some(x => x == 2) // false (none are 2)
[1, 2, 1].some(x => x == 2) // true (2nd is 2)
[2, 2, 2].some(x => x == 2) // true (all are 2)
[1, 1, 1].every(x => x == 1) // true (all are 1)
[1, 2, 1].every(x => x == 1) // false (2nd is not 1)
[2, 2, 2].every(x => x == 1) // false (none are 1)
旁注
由于.some()
和已经提供了一个布尔值,因此可以通过删除if..else
来缩短代码段
以下是上述每个代码段的等效代码:
document.getElementById("button-next").disabled = !clicks.some(x => x == 2);
$('.btn clicked').length==0是什么意思?第一部分是jquery选择器:$(.btn clicked')。这将在文档中搜索具有“btn clicked”类的所有元素。单击按钮时(使用“toggleClass”)会将该类添加到按钮中(如果已经有该类,则会将其从按钮中删除)。选择器将返回类似于数组的内容,因此它将具有一个“length”属性,指示在“.btn clicked”类中找到了多少元素。通过这种方式,我们可以发现是否有任何按钮被点击。如果未单击任何项,$('.btn clicked')。长度===0将计算为true。$('.btn clicked')。长度===0是什么意思?第一部分是jquery选择器:$(.btn clicked')。这将在文档中搜索具有“btn clicked”类的所有元素。单击按钮时(使用“toggleClass”)会将该类添加到按钮中(如果已经有该类,则会将其从按钮中删除)。选择器将返回类似于数组的内容,因此它将具有一个“length”属性,指示在“.btn clicked”类中找到了多少元素。通过这种方式,我们可以发现是否有任何按钮被点击。如果未单击任何项,$('.btn clicked').length==0将计算为true。