Массив установлен, но не определен - PullRequest
0 голосов
/ 07 октября 2011

Я использую изотоп jQuery для фильтрации фотографий продуктов.Мне пришлось изменить пример, чтобы использовать поля выбора, что прекрасно работает, но теперь мне нужно адаптировать код из примера, который имеет несколько атрибутов фильтрации.

Это пример кода, который работает:

   $(function(){

    var $container = $('#container'),
        filters = {};

    $container.isotope({
      itemSelector : '.color-shape',
      masonry: {
        columnWidth: 80
      }
    });

    // filter buttons
    $('.filter a').click(function(){
      var $this = $(this);
      // don't proceed if already selected
      if ( $this.hasClass('selected') ) {
        return;
      }

      var $optionSet = $this.parents('.option-set');
      // change selected class
      $optionSet.find('.selected').removeClass('selected');
      $this.addClass('selected');

      // store filter value in object
      // i.e. filters.color = 'red'
      var group = $optionSet.attr('data-filter-group');
      filters[ group ] = $this.attr('data-filter-value');
      // convert object into array
      var isoFilters = [];
      for ( var prop in filters ) {
        isoFilters.push( filters[ prop ] )
      }
      var selector = isoFilters.join('');
      $container.isotope({ filter: selector });

      return false;
    });
});

А вот мой код, который не работает.

$(function() {

    var $container = $('#productsContainer'),
        filters = {};
    $container.isotope({
        itemSelector: '.item'
    });
    $('.filter select').change(function() {
        var $this = $(this),
            $optionSet = $this.parents('.option-set'),
            $container = $('#productsContainer');
        var group = $optionSet.attr('data-filter-group');
        filters[group] = $this.attr('data-filter-value');
        // convert object into array
        var isoFilters = [];
        for (var prop in filters) {
            isoFilters.push(filters[prop])
        }
        var selector = isoFilters.join('');
        $container.isotope({
            filter: selector
        });
        return false;
    });
});

Я отследил его до добавляемых элементов массива isoFilters, но они пусты.Я не могу понять, в чем проблема.

Код работает, если я заменяю эту строку:

    var selector = isoFilters.join('');

На это:

        var selector = $("option:selected",this).attr("data-filter-value");

Но это не позволяет фильтровать только по обеим группамодин.

Я как бы над этим думаю, надеюсь на помощь.

Спасибо.

1 Ответ

0 голосов
/ 11 октября 2011

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

filters[group] = $this.attr('data-filter-value');

Мне пришлось изменить это на:

filters[ group ] = $("option:selected",this).attr('data-filter-value');
...