Message d'erreur cannot read property 'box' of undefined"

Fermé
europe21 Messages postés 63 Date d'inscription mardi 26 décembre 2017 Statut Membre Dernière intervention 4 février 2024 - 8 janv. 2018 à 14:15
europe21 Messages postés 63 Date d'inscription mardi 26 décembre 2017 Statut Membre Dernière intervention 4 février 2024 - 8 janv. 2018 à 16:54
Bonjour, pouvez vous me dire pourquoi la console me dit "cannot read property 'box' of undefined" alors que je prefixe box par carousel qui est mon objet.
voici mon code:
var carousel = {
    box: document.querySelector('.carouselbox')
    , next: carousel.box.querySelector('.next')
    , prev: carousel.box.querySelector('.prev')
    , items: carousel.box.querySelectorAll('.content li')
    , counter: 0
    , amount: carousel.items.length
    , current: carousel.items[0]
    , active: carousel.box.classList.add('active')
    , navigate: function (direction) { 
        carousel.current.classList.remove('current');
        carousel.counter = carousel.counter + this.direction;
        if (this.direction === -1 && carousel.counter < 0) {
            carousel.counter = carousel.amount - 1;
        }
        if (direction === 1 && !carousel.items[carousel.counter]) {
            carousel.counter = 0;
        }
        carousel.current = carousel.items[carousel.counter];
        carousel.current.classList.add('current');
    }
    , click: function () {
        next.addEventListener('click', function (e) {
            carousel.navigate(1);
        });
        prev.addEventListener('click', function (e) {
            carousel.navigate(-1);
        });
        carousel.navigate(0);
    }
    , clavier: function () {
        document.addEventListener("keydown", function (e) {
            if (e.keyCode === 37) {
                carousel.navigate(-1);
            }
            else if (e.keyCode === 39) {
                carousel.navigate(1);
            }
        });
    },
};
carousel.navigate();
carousel.clavier();
carousel.click();


merci beaucoup.



1 réponse

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
8 janv. 2018 à 14:36
Bonjour,

Le problème c'est que tu définis un objet en faisant appel à lui-même.
Cela n'a pas de sens.
Tu devrais d'abord définir box, puis carousel :
var box = document.querySelector('.carouselbox');
var carousel = {
    box: box
    , next: box.querySelector('.next')
    , prev: box.querySelector('.prev')
...


Xavier
0
europe21 Messages postés 63 Date d'inscription mardi 26 décembre 2017 Statut Membre Dernière intervention 4 février 2024
8 janv. 2018 à 14:37
ok merci beaucoup.
0
europe21 Messages postés 63 Date d'inscription mardi 26 décembre 2017 Statut Membre Dernière intervention 4 février 2024
Modifié le 8 janv. 2018 à 16:54
voila j'avance ,ce code marche:
var box = document.querySelector('.carouselbox');
   var next = box.querySelector('.next');
   var prev = box.querySelector('.prev');
   var items = box.querySelectorAll('.content li');
 
   var carousel = {
       counter: 0
       , amount: items.length
       , current: items[0]
       , navigate: function (direction) {
           carousel.current.classList.remove('current');
           carousel.counter = carousel.counter + direction;
           if (direction === -1 && carousel.counter < 0) {
               carousel.counter = carousel.amount - 1;
           }
           if (direction === 1 && !items[carousel.counter]) {
               carousel.counter = 0;
           }
           carousel.current = items[carousel.counter];
           carousel.current.classList.add('current');
       }
       , nexte: function () {
           next.addEventListener('click', function (e) {
               carousel.navigate(1);
           });
       }
       , preve: function () {
           prev.addEventListener('click', function (e) {
               carousel.navigate(-1);
           });
       }
       , clavier: function () {
           document.addEventListener("keydown", function (e) {
               if (e.keyCode === 37) {
                   carousel.navigate(-1);
               }
               else if (e.keyCode === 39) {
                   carousel.navigate(1);
               }
           });
       }
   , };
 
carousel.navigate(0);
   carousel.nexte();
   carousel.preve();
   carousel.clavier();

0