Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Functions declared within loops referencing an outer scoped variable may lead to conf (https://javascript.ru/forum/jquery/69448-functions-declared-within-loops-referencing-outer-scoped-variable-may-lead-conf.html)

mrG0bliN 23.06.2017 14:22

Functions declared within loops referencing an outer scoped variable may lead to conf
 
function jqFormSteps() {
    var n = 0;
    for (n = 0; n < 5; n++) {

      var formStep = $('#form_step_one> fieldset');
      var stepNext = $('fieldset[data-step="' + n + '"]').next();
      var stepPrev = $('fieldset[data-step="' + n + '"]').prev();

  тут ошибка->>    var stepFormAddClass = function(parm1, parm2) {
        $(parm1).on('click', function(event) {
          event.preventDefault();
          formStep.removeClass('selector');
          parm2.addClass('selector');
        });
      };
      stepFormAddClass('#next' + n + '', stepNext);
      stepFormAddClass('#prev' + n + '', stepPrev);
    }
  }
-------

ошибка: Functions declared within loops referencing an outer scoped variable may lead to confusing semantic.

как избавится от ошибки? понимаю что функция вошла в цикл и это не самый лучший способ что бы листать блоки туда сюда :(

j0hnik 23.06.2017 14:55

функцию вынеси за цикл фор, зачем ее в цикл засунул?

mrG0bliN 23.06.2017 15:29

function jqFormSteps() {
      var n = 0;
      var formStep = $('#form_step_one> fieldset');
      var stepNext = $('fieldset[data-step="' + n + '"]').next();
      var stepPrev = $('fieldset[data-step="' + n + '"]').prev();

      var stepFormAddClass = function(parm1, parm2) {
        $(parm1).on('click', function(event) {
         for (n = 0;n < 5;n++) {
          event.preventDefault();
          formStep.removeClass('selector');
          parm2.addClass('selector');
        }
      });
      stepFormAddClass('#next' + n + '', stepNext);
      stepFormAddClass('#prev' + n + '', stepPrev);
    };
  }


ошибка пропадает. но зато перестают перелистыватся туда сюда дивы
:(
и моя форма ломается

j0hnik 23.06.2017 16:16

function jqFormSteps() {
      var n = 0;
      var formStep = $('#form_step_one> fieldset');
      var stepNext = $('fieldset[data-step="' + n + '"]').next();
      var stepPrev = $('fieldset[data-step="' + n + '"]').prev();

      var stepFormAddClass = function(parm1, parm2) {
        $(parm1).on('click', function(event) {
          event.preventDefault();
          formStep.removeClass('selector');
          parm2.addClass('selector');
        });
      };
       for (n = 0;n < 5;n++) {
      stepFormAddClass('#next' + n + '', stepNext);
      stepFormAddClass('#prev' + n + '', stepPrev);
    }
  }

попробуйте вот так, если не получится, сделайте тестовый пример здесь.

mrG0bliN 23.06.2017 17:40

function jqFormSteps() {
    var moveStep = {
      nextStep: function() {  $('[data-step]:visible').removeClass('selector').next().addClass('selector');  },
      prevStep: function() {  $('[data-step]:visible').removeClass('selector').prev().addClass('selector');  }
    };
    var stepFormAddClass = function(param1) {
      $(param1).on('click', function(event) {
        event.preventDefault();
        if (param1 == '.js__nextButton') { moveStep.nextStep(); } else { moveStep.prevStep();}
      });
    };
    stepFormAddClass('.js__nextButton');
    stepFormAddClass('.js__prevButton');
  }

переписал по новой. теперь работает переключение и нет ошибок


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