[英]EventListener doesnt work for all elements
My problem is that I'm stuck on trying to make several elements move onclick .我的问题是我一直试图让几个元素移动onclick 。 When I click on any of my tags only the first one actually moves.
当我点击我的任何标签时,只有第一个标签实际移动。 I know I've probably made a mistake somewhere in the code but I can't find it, would be great if you guys can help me:) My code basically looks something like this:
我知道我可能在代码的某个地方犯了一个错误,但我找不到它,如果你们能帮助我会很棒:) 我的代码基本上看起来像这样:
var my_atag0 = document.createElement('a');
my_atag0.classList.add('nav_button');
var my_atag1 = document.createElement('a');
my_atag1.classList.add('nav_button');
var my_atag2 = document.createElement('a');
my_atag2.classList.add('nav_button');
var my_atag3 = document.createElement('a');
my_atag3.classList.add('nav_button');
function navToggle() {
var navStatus = false;
if (navStatus == false){
document.querySelector(".nav_button").style.marginTop = "100px";
navStatus = true;
}
else if (navStatus == true) {
document.querySelector(".nav_button").style.marginTop = "0px";
navStatus = false;
}
}
document.querySelectorAll(".nav_button").forEach(a => {a.addEventListener("click", function() {
navToggle()
})})
if (navStatus == false){
document.querySelector(".nav_button").style.marginTop = "100px";
navStatus = true;
}
else if (navStatus == true) {
document.querySelector(".nav_button").style.marginTop = "100px";
navStatus = false;
}
here, you are using queryselector to target all the elements.在这里,您使用 queryselector 来定位所有元素。 im sure it doesnt work because using
querySelector
to target a class will return an array containing the elements我确定它不起作用,因为使用
querySelector
来定位 class 将返回一个包含元素的数组
try using querySelectorAll
and loop through them to change the styles instead尝试使用
querySelectorAll
并遍历它们以更改 styles
const navButtons = document.querySelectorAll(".nav_button");
let navStatus = false;
if (navStatus === false){
for (var i = 0; i < navbuttons.length; i++) {
navbuttons[i].style.marginTop = 100px;
}
navStatus = true;
}
else if (navStatus === true) {
for (var i = 0; i < navbuttons.length; i++) {
navbuttons[i].style.marginTop = 100px;
}
navStatus = false;
}
sidenote: its not good to use var
, use const
and let
instead旁注:使用
var
不好,改用const
和let
and put let navStatus = false;
并
let navStatus = false;
outside the function because sometimes putting it in the function doesn't work在 function 之外,因为有时将其放入 function 不起作用
querySelector method can get only first element of selected ones. querySelector 方法只能获取所选元素的第一个元素。
querySelectorAll can get NodeList object of selected elements. querySelectorAll 可以获得被选元素的NodeList object。
this is an example for you这是给你的一个例子
if(...){
document.querySelectorAll(".nav_button").forEach(x => x.style.marginTop = "100px");
navStatus = true;
}
and in extra, you can use this way instead of setting value in if ~ else scope此外,您可以使用这种方式而不是在 if ~ else scope 中设置值
if(boolean){
...
// when true
}else {
...
// when false
}
boolean = !boolean;
// toggles true and false
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.