@codymaverick

Как избавиться от дублирования кода внутри функции конструктора?

Привет.
Есть такой код, как избавиться от дублирования кода в цикле each и событии mousedown?

function SliderRange() {  

  this.init_function = function () {
    $('.g_slider_range').each(function () {
      var inputMinVal = $(this).siblings('.from').find('.b-filter-price__input');
      var inputMaxVal = $(this).siblings('.to').find('.b-filter-price__input');

      if ($(inputMinVal)[0].value === '') {
        $(inputMinVal)[0].value = $(this).find('.slider-range__input-min').val();
      }
      if ($(inputMaxVal)[0].value === '') {
        $(inputMaxVal)[0].value = $(this).find('.slider-range__input-max').val();
      }
    })
  };

  this.init_function();

  $('.g_slider_range').on('mousedown', function () {
    $(this).on('mousemove', function () {
      var inputMinVal = $(this).siblings('.from').find('.b-filter-price__input');
      var inputMaxVal = $(this).siblings('.to').find('.b-filter-price__input');

      if ($(inputMinVal)[0].value === '') {
        $(inputMinVal)[0].value = $(this).find('.slider-range__input-min').val();
      }
      if ($(inputMaxVal)[0].value === '') {
        $(inputMaxVal)[0].value = $(this).find('.slider-range__input-max').val();
      }
    });
  })

}
  • Вопрос задан
  • 92 просмотра
Решения вопроса 2
@tin_vsl
Senior Developer
объявить функцию и указывать её в цикле и обработчике события

function SliderRange() {
  var moveHandler = function () {
    var inputMinVal = $(this).siblings('.from').find('.b-filter-price__input');
    var inputMaxVal = $(this).siblings('.to').find('.b-filter-price__input');

    if ($(inputMinVal)[0].value === '') {
      $(inputMinVal)[0].value = $(this).find('.slider-range__input-min').val();
    }
    if ($(inputMaxVal)[0].value === '') {
      $(inputMaxVal)[0].value = $(this).find('.slider-range__input-max').val();
    }
  };

  this.init_function = function() {
    $('.g_slider_range').each(moveHandler);
  }
  this.init_function();
  $('.g_slider_range').on('mousedown', function () {
    $(this).on('mousemove', moveHandler);
  })
}
Ответ написан
Комментировать
@codymaverick Автор вопроса
function SliderRange() {

  this.init_function_inn = function (element) {
    var inputMinVal = $(element).siblings('.from').find('.b-filter-price__input');
    var inputMaxVal = $(element).siblings('.to').find('.b-filter-price__input');

    if ($(inputMinVal)[0].value === '') {
      $(inputMinVal)[0].value = $(element).find('.slider-range__input-min').val();
    }
    if ($(inputMaxVal)[0].value === '') {
      $(inputMaxVal)[0].value = $(element).find('.slider-range__input-max').val();
    }
  }

  this.init_function = function () {
    $('.g_slider_range').each(function () {
      this_obj.init_function_inn(this);
    })
  };

  this.init_function();

  $('.g_slider_range').on('mousedown', function () {
    $(this).on('mousemove', function () {
      this_obj.init_function_inn(this);
    });
  });
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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