@uzi_no_uzi

Как передавать правильное значение в функцию?

Имеется такая часть кода, проблема в том, что передается не то значение в функцию self.open(), а именно startHeight. При каждой итерации цикла, значение startHeight меняется, но при клике, когда срабатывает addEventListener, передается последнее, которое было сохранено в startHeight. Что с этим можно сделать?

var self = this;
    this.accordion = document.querySelectorAll(options.accordionSelector);
    
    this.init = function() {

        if(this.accordion.length > 0) {

            for(var i = 0; i < this.accordion.length; i++) {
                //Прячем всю информацию при загрузке
                var desc = this.accordion[i].querySelector('.accordion__information');

                var startHeight = desc.clientHeight;

                desc.style.height = '0';
                desc.style.padding = '0 22px';

                //Действия при клике по названию
                var header = this.accordion[i].querySelector('.accordion__header');
                header.addEventListener('click', function(event){
                    self.open(event.target, startHeight);
                })
            }

        }
    }
  • Вопрос задан
  • 135 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Можно прицепить значение к элементу в виде атрибута, и читать в обработчике значение атрибута.

Можно прицепить значение к обработчику в виде this или параметра с помощью bind.

Можно обернуть назначение обработчика в iife, передавать в него значение параметром.

Можно с помощью new Function или eval создать обработчик с зашитой внутрь константой.

Ну и ещё let есть.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы