привязка noUiSlider с номером типа ввода - PullRequest
0 голосов
/ 21 октября 2019

Я использую noUISlider на плагине facetwp в WordPress, и я сделал некоторые настройки, чтобы заставить его работать с входами (я даже не думаю, что это проблема WordPress, поэтому я публикую это здесь)

Все работает отличноно только в первый раз, когда я пытаюсь изменить значение ползунка с помощью ввода, во второй раз все переключается на «0», поэтому оба поля ввода ведут себя так, и ничего не фильтруется, что очевидно, потому что значение равно 0 как в мин. и макс.

      $(document).on('facetwp-loaded', function() {
      var updateFWP = function(facet_name) {
          FWP.frozen_facets[facet_name] = 'hard';
          FWP.autoload();
      };

      var onChangeEvent = function(handle, t) {
          var parent = $(t).closest('.facetwp-type-slider');
          var slider = parent.find('.facetwp-slider');
          slider[0].noUiSlider.setHandle(handle, t.value);

          updateFWP(parent.attr('data-name'));
      }

      $('.facetwp-type-slider .facetwp-slider:not(.ready)').each(function() {
          var $parent = $(this).closest('.facetwp-facet');
          var facet_name = $parent.attr('data-name');
          var opts = FWP.settings[facet_name];

          // on first load, check for slider URL variable
          if (false !== FWP.helper.get_url_var(facet_name)) {
              FWP.frozen_facets[facet_name] = 'hard';
          }

          // fail on slider already initialized
          if ('undefined' !== typeof $(this).data('options')) {
              return;
          }

          // fail if start values are null
          if (null === FWP.settings[facet_name].start[0]) {
              return;
          }

          // fail on invalid ranges
          if (parseFloat(opts.range.min) >= parseFloat(opts.range.max)) {
              FWP.settings[facet_name]['lower'] = opts.range.min;
              FWP.settings[facet_name]['upper'] = opts.range.max;
              FWP.hooks.doAction('facetwp/set_label/slider', $parent);
              return;
          }

          var inputMin = $(this).find('.slider-input-min');
          var inputMax = $(this).find('.slider-input-max');

          // custom slider options
          var slider_opts = FWP.hooks.applyFilters('facetwp/set_options/slider', {
              range: opts.range,
              start: opts.start,
              //step: parseFloat(opts.step),
              connect: true
          }, { 'facet_name': facet_name });

          var slider = this;
          noUiSlider.create(slider, slider_opts);

          slider.noUiSlider.on('update', function(values, handle) {
              var value = values[handle];
              if (handle) {
                  inputMax.val(value);
              } else {
                  inputMin.val(value);
              }
              FWP.settings[facet_name]['lower'] = values[0];
              FWP.settings[facet_name]['upper'] = values[1];
              FWP.hooks.doAction('facetwp/set_label/slider', $parent);
          });

          slider.noUiSlider.on('set', function() {
              updateFWP(facet_name);
          });

          $(this).addClass('ready');
      });

      $('.slider-input-min').on('change', function () {
          onChangeEvent(0, this);
      });

      $('.slider-input-max').on('change', function () {
          onChangeEvent(1, this);
      });
  });

Так что в основном все работает хорошо, когда я использую «ползунок», но не с входами ... Я пытался много вещей, но понятия не имею, почему это не работает.

Может быть, у кого-то из вас была похожая проблема с проблемой facetwp + nouislider?

спасибо!

...