@neytan

Пропадает this в функции, как можно исправить?

Добрый день. Написал небольшую функцию на jquery, но она не работает, я так понял что функция не видит this, как можно это исправить? Вот сама функция:
function filterShow() {
    $(this).parents('.accordion-item').find('.form-input').val('');
    $(this).parents('.accordion-item').find('.f-select-title').each(selectDefaultValue);
    function selectDefaultValue() {
      var defaultValue = $(this).data('default_title');
      $(this).text(defaultValue);
    }
  }
  $('.lft-close').on('click', function(){
    filterShow();
  });
  • Вопрос задан
  • 108 просмотров
Решения вопроса 3
@jfswift
Junior front-end dev.
Передать filterShow в качестве коллбэка
Ответ написан
Комментировать
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Самый простой вариант предложен уже jj swift $('.lft-close').on('click', filterShow);
Если все же без обертки никак, то this можно отдать в вызываемую функцию явно:
$('.lft-close').on('click', function(){
    filterShow.call(this);
});


Ну и стоит почитать теорию JS:
- Что такое контекст выполнения функции в JS
- Как работают методы call и apply у функции
Ответ написан
@AleksRap
Использовать стрелочную функцию в обработчике клика, либосразу указать эту функцию, а не заворачивать функцию в функцию
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
twobomb
@twobomb
$('.lft-close').on('click', function(){
    filterShow.bind(this)();
  });

$('.lft-close').on('click', function(){
    filterShow.apply(this)
  });

$('.lft-close').on('click', function(){
    filterShow.call(this)
  });
Ответ написан
Ваш ответ на вопрос

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

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