带有两个 select / 下拉字段的 MixItUp
MixItUp with two select / dropdown fields
我的 JS 还不够先进,无法充分发挥作用。
我有两个 select 选项字段:
<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);
});
});
如果我按 1 select 过滤,事情就会正常过滤。如果我然后按另一个过滤,它会覆盖第一个过滤器。我想要的是它们都被使用。
我知道有一种方法可以让它工作,但我不确定如何让连接的字符串执行文档 Advanced Filtering 部分中记录的 "and" 逻辑使用 <select>
。有帮助吗?
使用逗号,例如..
$('#filter-location, #filter-container')
.on('change', 函数(){
...
;)
像这样...
$(function(){
$container = $('#filter-container');
$container.mixItUp({});
$container.on('change','#filter-position, #filter-location', function(){
$container.mixItUp('filter', this.value);
});
});
你真的很接近!由于 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>
对于您的两个下拉菜单,否则您可能会遇到一些奇怪的行为。
我的 JS 还不够先进,无法充分发挥作用。
我有两个 select 选项字段:
<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);
});
});
如果我按 1 select 过滤,事情就会正常过滤。如果我然后按另一个过滤,它会覆盖第一个过滤器。我想要的是它们都被使用。
我知道有一种方法可以让它工作,但我不确定如何让连接的字符串执行文档 Advanced Filtering 部分中记录的 "and" 逻辑使用 <select>
。有帮助吗?
使用逗号,例如.. $('#filter-location, #filter-container') .on('change', 函数(){ ... ;)
像这样...
$(function(){
$container = $('#filter-container');
$container.mixItUp({});
$container.on('change','#filter-position, #filter-location', function(){
$container.mixItUp('filter', this.value);
});
});
你真的很接近!由于 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>
对于您的两个下拉菜单,否则您可能会遇到一些奇怪的行为。