4

我在 JS 方面不够先进,无法充分发挥作用。

我有两个带有选项的选择字段:

    <select name="" id="filter-position">
      <option value="all">Filter by position</option>
      <option value=".instructor">Instructor</option>
      <option value=".leader">Leader</option>
      <option value=".blah">Blah</option>
      <option value=".whatever">Whatever</option>
    </select>

    <select name="" id="filter-location">
      <option value="all">Filter by position</option>
      <option value=".portland">Portland</option>
      <option value=".missoula">Missoula</option>
      <option value=".chicago">Chicago</option>
      <option value=".newyork">New York</option>
    </select>

过滤项目所在的容器看起来有点像这样:

    <ul id="filter-container">
        <li class="mix">...</li>
        <li class="mix">...</li>
        <li class="mix">...</li>
        <li class="mix">...</li>
        <li class="mix">...</li>
        <li class="mix">...</li>
    </ul>

我可以让每一个都正确过滤但不能一起过滤(即AND)。我使用的 JS 代码是这样的:

  $(function(){
    var $positionSelect = $('#filter-position'),
        $locationSelect = $('#filter-location'),
        $container = $('#filter-container');

    $container.mixItUp({});

    $positionSelect.on('change', function(){
      $container.mixItUp('filter', this.value);
    });

    $locationSelect.on('change', function(){
      $container.mixItUp('filter', this.value);
    });
  });

如果我按一个选择进行过滤,则事情会正确过滤。如果我然后按另一个过滤,它会覆盖第一个过滤器。我想要的是让它们都被使用。

我知道有一种方法可以让它工作,但我不确定如何让连接的字符串执行“和”逻辑,使用<select>. 帮助?

4

3 回答 3

5

你真的很亲近!由于 mixItUp API 的工作原理,过滤器不是附加的(例如,当您调用 时mixItUp.filter,它不会将新过滤器添加到已经激活的过滤器)。因此,您只需要在其中一个更改时从两个下拉列表的值中构造一个新的过滤器字符串。你可以这样做:

$(function(){
    var $positionSelect = $('#filter-position'),
        $locationSelect = $('#filter-location'),
        $container = $('#filter-container');

    $container.mixItUp({});

    $('#filter-position, #filter-location').on('change', function() {

      var filterString = $positionSelect.val() + $locationSelect.val();

      $container.mixItUp('filter', filterString);
    });

  });

在这种情况下,我选择使用 jQuery.val()而不是本机.value,因为您已经在使用 jQuery,并且val()在这种情况下可能会更可靠。如果您遇到麻烦,请告诉我。

您可能还想更改此设置:

<option value="all">Filter by position</option>

对此:

<option value="">Filter by position</option>

对于您的两个下拉菜单,否则您可能会遇到一些奇怪的行为。

于 2015-10-27T00:58:21.187 回答
0

像这样的东西...

$(function(){
    $container = $('#filter-container');

    $container.mixItUp({});

    $container.on('change','#filter-position, #filter-location', function(){
        $container.mixItUp('filter', this.value);
    });
});
于 2015-10-22T22:47:12.710 回答
0

使用逗号,如.. $('#filter-location, #filter-container') .on('change', function(){ ... ;)

于 2015-10-22T22:43:01.673 回答