Em đang tạo một menu dropbox có menu con sử dụng javascript. Thứ tự các thẻ của menu trong html như sau: thẻ nav đầu có class là .nav > ul > li > ul. Sau đó em có dùng Js để khi trỏ chuột vào thẻ li cấp 3 thì thẻ ul cấp 4 sẽ được gán display là flex. Nhưng khi chạy thực tế trên trình duyệt thì báo lỗi.
Em mày mò hoài thay chữ j bằng số vào trong mảng hover thì nó chạy nhưng dùng biết j thì báo lỗi. Mong mọi người giúp đỡ tìm lỗi giúp em
Vấn đề về biến mảng và vòng lặp for trong javascript
Trong event
bạn thử in ra giá trị của j
là biết liền à [spoiler]Do bạn khai báo
var j
nên trong cái event
của bạn j
(thường) sẽ có giá trị là 4
(a.length
) tương ứng với lúc nó kết thúc vòng lặp, hay nói cách khác j
sẽ được tính lúc event
xảy ra chứ không phải lúc bạn addEventListener
.[/spoiler]
Một số cách giải quyết:
- Dùng ES6: thay
var
bằnglet
for (let j = 0; j < a.length; j++) { /*...*/ }
for (var j = 0; j < a.length; j++) {
(function (j) {
// a[j].addEventListener ...
}) (j);
}
1 Like
Cảm ơn anh nhiều. Em mò qua giờ mà không được