30/09/2018, 23:32

Vấn đề về biến mảng và vòng lặp for trong javascript

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

Hưng Lê viết 01:34 ngày 01/10/2018

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ằng let
for (let j = 0; j < a.length; j++) { /*...*/ }
  • Dùng Block Scoping Functions
for (var j = 0; j < a.length; j++) {
  (function (j) {
    // a[j].addEventListener ...
  }) (j);
}
Khoa Lê Minh viết 01:33 ngày 01/10/2018

Cảm ơn anh nhiều. Em mò qua giờ mà không được

Bài liên quan
0