Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Предотвращение ошибки (https://javascript.ru/forum/dom-window/74380-predotvrashhenie-oshibki.html)

s24344 05.07.2018 12:54

Предотвращение ошибки
 
Ребята, подскажите, как решить следующую задачу:
У меня следующий функционал:
class doctorsNavModule {

  constructor () {}

  handler () {

    const
      _this = this;

    const
      trigger = $('.submenu__link-nav-trigger');

    trigger.on('click', function (event) {
      event.preventDefault();

      let
        $this = $(this),
        targer = $this.data('name'),
        reqSection = {};

      setTimeout(function() {
        $('[data-target]').each(function () {
          let
            $this = $(this),
            trigger = $this.data('target');

          if (targer == trigger) {
            reqSection = $this;
          }
        });

        let reqScroll = reqSection.offset().top - 300; // Uncaught TypeError: reqSection.offset is not a function

        console.log(reqScroll);

        $('html, body').animate({
          scrollTop: reqScroll
        });

      }, 500);

    });

  }

  init () {
    this.handler();
  }

}

let doctorsNavInit = new doctorsNavModule();

doctorsNavInit.init();


И, при определенных действиях, следующий код:
let reqScroll = reqSection.offset().top - 300;

выдает ошибку:
Uncaught TypeError: reqSection.offset is not a function

После чего приложение падает.
Я знаю (думаю), что данный момент можно обработать, чтобы код не ломался с помощью перехвата ошибок, "try..catch", но не понимаю как правильно это сделать.
Помогите, пожалуйста решить данную задачу.

j0hnik 05.07.2018 13:00

странный код,
зачем setTimeout ?
для чего reqSection = {};

Dilettante_Pro 05.07.2018 13:03

s24344,
А зачем у вас setTimeout ?

Вместо использования "try..catch" лучше написать правильный код

s24344 05.07.2018 13:26

Это просто пример. Мне интересна сама идея, возможно ли в месте, где будет ошибка, обработать этот момент.

j0hnik 05.07.2018 13:32

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

s24344 05.07.2018 13:35

Спасибо.

Dilettante_Pro 05.07.2018 13:41

Обработать-то легко
let reqSection = {};
try {
   let reqScroll = reqSection.offset().top - 300;
}
catch {
    reqScroll = 0;
}
alert(reqScroll);

Но это замаскирует ошибки кода.


Часовой пояс GMT +3, время: 08:15.