Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript queryselector和eventlistener中的数组问题_Javascript_Arrays - Fatal编程技术网

Javascript queryselector和eventlistener中的数组问题

Javascript queryselector和eventlistener中的数组问题,javascript,arrays,Javascript,Arrays,面对我无法理解如何使用elements语句管理的事情,比如用事件侦听器切换类。下面的代码显示了带有click事件的按钮,该按钮添加该类,如果其他人拥有该类,则将其删除。但每次最后一个按钮都不会对该事件做出反应。谁能告诉我为什么以及如何处理 let buttons=document.querySelectorAll('button'); 数组.from(按钮).forEach(函数(el,i){ el.addEventListener('click',function(){ 用于(让val的按钮

面对我无法理解如何使用elements语句管理的事情,比如用事件侦听器切换类。下面的代码显示了带有click事件的按钮,该按钮添加该类,如果其他人拥有该类,则将其删除。但每次最后一个按钮都不会对该事件做出反应。谁能告诉我为什么以及如何处理

let buttons=document.querySelectorAll('button');
数组.from(按钮).forEach(函数(el,i){
el.addEventListener('click',function(){
用于(让val的按钮){
console.log(val)
if(val.classList.contains('red')){
val.classList.remove('red');
}否则{
el.classList.add('red');
}
}		
})
})
.red{
颜色:红色;
}
按钮1
按钮2

按钮3
您在if-else语句代码中犯了一些错误:

在这里,我纠正它:

let buttons=document.querySelectorAll('button');
数组.from(按钮).forEach(函数(el,i){
el.addEventListener('click',function(){
用于(让val的按钮){
if(val.classList.contains('red')){
val.classList.remove('red');
}
el.classList.add('red');
console.log(val)
}		
})
})
.red{
颜色:红色;
}
按钮1
按钮2

按钮3
您在if-else语句代码中犯了一些错误:

在这里,我纠正它:

let buttons=document.querySelectorAll('button');
数组.from(按钮).forEach(函数(el,i){
el.addEventListener('click',function(){
用于(让val的按钮){
if(val.classList.contains('red')){
val.classList.remove('red');
}
el.classList.add('red');
console.log(val)
}		
})
})
.red{
颜色:红色;
}
按钮1
按钮2

按钮3
这样你就不想把“red”类添加到你点击的类中,然后从其他所有类中删除它了,对吗

const buttons=document.queryselectoral('button');
数组.from(按钮).forEach(函数(x){
x、 addEventListener('click',函数(b){
不确定();
b、 srcmelement.classList.add('red');
})
})
函数未设置(){
[]forEach.call(document.queryselectoral('button.red'),函数(x){
x、 classList.remove('red');
});
}
.red{
颜色:红色;
}
按钮
按钮

按钮
这样您就不想将类“red”添加到您单击的类中,并将其从所有其他类中删除,对吗

const buttons=document.queryselectoral('button');
数组.from(按钮).forEach(函数(x){
x、 addEventListener('click',函数(b){
不确定();
b、 srcmelement.classList.add('red');
})
})
函数未设置(){
[]forEach.call(document.queryselectoral('button.red'),函数(x){
x、 classList.remove('red');
});
}
.red{
颜色:红色;
}
按钮
按钮

按钮
所以首先要显示的是,代码稍微缩短了一点。它并不完全是您想要的(将在下一个代码段中显示)。但它所做的几乎就是你想要的。单击它可将类切换为红色。缺少的部分是,它不会切换所有其他按钮。
let buttons=document.querySelectorAll('button');
按钮。forEach(功能(元素){
元素。addEventListener('click',function(){
if(element.classList.contains('red')){
element.classList.remove('red');
}否则{
element.classList.add('red');
}
});
});
.red{
颜色:红色;
}
按钮1
按钮2

按钮3
所以首先要显示的是,代码稍微缩短了一点。它并不完全是您想要的(将在下一个代码段中显示)。但它所做的几乎就是你想要的。单击它可将类切换为红色。缺少的部分是,它不会切换所有其他按钮。
let buttons=document.querySelectorAll('button');
按钮。forEach(功能(元素){
元素。addEventListener('click',function(){
if(element.classList.contains('red')){
element.classList.remove('red');
}否则{
元素.classList.add('red');
}
});
});
.red{
颜色:红色;
}
按钮1
按钮2

按钮3
if-else
有什么问题?除了
控制台.log
所在的位置外,您在
if-else
中更改了什么?是的,它可以工作。。。但其他条件有什么问题。。。为什么最后一个元素总是在这种情况下不起反应?@Hassaniam是的,你删除了它,但这并不能真正改变任何事情。@caramba,实际上它有帮助。但是不要把最后一个元素当作问题。为什么它不能正常工作。@嗯,您的条件是将红色类添加到单击的按钮,并从任何其他按钮中删除红色类。但是,如果一个按钮没有red类,那么您的代码将向其添加red类,该类后来被删除,如果该按钮在数组中的后面,则其red类将被删除。我希望,我已经解释过自己了。
if-else
有什么问题?除了
控制台.log
所在的位置外,您在
if-else
中更改了什么?是的,它可以工作。。。但其他条件有什么问题。。。为什么最后一个元素总是在这种情况下不起反应?@Hassaniam是的,你删除了它,但这并不能真正改变任何事情。@caramba,实际上它有帮助。但是不要把最后一个元素当作问题。为什么它不能正常工作。@嗯,您的条件是将红色类添加到单击的按钮,并从任何其他按钮中删除红色类。但是,如果一个按钮没有red类,那么您的代码将向其添加red类,该类后来被删除,如果该按钮在数组中的后面,则其red类将被删除。我希望,我已经自我解释过了。我想其他方面也是如此。)@沃纳:这是解决上述问题的更好办法。太清楚了!荣誉我认为,从另一方面来说,情况也是如此。)@沃纳:这是解决上述问题的更好办法。太清楚了!荣誉谢谢你的解释。刚刚用过。红色很明显