onbeforechange приводит к ошибке после последнего шага в intro.js

#intro.js

#intro.js

Вопрос:

Мне нужно инициировать изменение страницы перед загрузкой шага. (В частности, мне нужно вызвать меню для открытия перед следующим шагом; следующий шаг выделит это открытое меню.) Для достижения этой цели я использую introJS.onbeforechange(), который работает хорошо. Внутри обработчика событий, когда достигается правильный шаг, меню запускается для открытия. Этот шаг находится в середине шагов на странице. После последнего шага введение продолжается на другой странице.

На последнем шаге страницы, когда я нажимаю стрелку вправо (кнопка «Далее» скрыта), это должно начать вводную часть на новой странице. Но вместо этого генерируется ошибка:

 intro.min.js:10 Uncaught TypeError: Cannot read property 'element' of undefined
at J.E (intro.min.js:10)
at J.L (intro.min.js:10)
at l (intro.min.js:10)
 

Это вызвано существованием обработчика onbeforechange.

Это код в intro.js где это терпит неудачу:

 if (typeof (this._introBeforeChangeCallback) !== 'undefined') {
  continueStep = this._introBeforeChangeCallback.call(this, nextStep.element);
}
 

Блок кода внутри onbeforechange никогда не запускается, что означает, что ошибка срабатывает до этого. Если я удалю обработчик onbeforechange, такой ошибки не будет.

Onbeforechange, похоже, не обрабатывает нажатие стрелки вправо на последнем шаге, и нет способа обнаружить это, чтобы устранить ошибку.

Ответ №1:

Ответ немного запутанный. Я добавил обработчик onchange, и когда шаг является последним шагом — и маловероятно, что пользователь вернется к шагу, который вызвал открытие меню, — я удалил обработчик onchange, используя это._introBeforeChangeCallback = undefined:

     intro.onchange(function ()
    {
        // last step 
        if (this._currentStep === 9) 
        {
         this._introBeforeChangeCallback = undefined;
        }
    });
 

Это означает, что если пользователь вернется к предыдущему шагу, меню больше не будет открываться.