过滤器+搜索与同位素打破搜索
Filters + Search with Isotopes Breaks Search?
我正在使用同位素(v1),并在钢笔中创建了一个示例搜索字段。
最初它工作,但是,如果我过滤同位素库,然后搜索字段停止工作。
我相信搜索功能仍然运行只是不过滤画廊,我不确定如何解决这个问题。事实上,我不确定确切的问题是什么,因为没有抛出错误。
这是一个带有工作示例的小提琴。
这是搜索,过滤和同位素JavaScript:
var $container = $('.isotope'),
qsRegex,
filters = {};
$container.isotope({
itemSelector : '.element',
masonry : {
columnWidth : 120
},
getSortData : {
name : function ( $elem ) {
return $elem.find('.name').text();
}
},
filter: function() {
return qsRegex ? $(this).text().match( qsRegex ) : true;
}
});
function searchFilter() {
qsRegex = new RegExp( $quicksearch.val(), 'gi' );
$container.isotope();
}
// use value of search field to filter
var $quicksearch = $('#quicksearch').keyup( debounce( searchFilter ) );
$('#reset').on( 'click', function() {
$quicksearch.val('');
searchFilter()
});
// store filter for each group
$('#filters').on( 'click', '.button', function() {
var $this = $(this);
// get group key
var $buttonGroup = $this.parents('.button-group');
var filterGroup = $buttonGroup.attr('data-filter-group');
// set filter for group
filters[ filterGroup ] = $this.attr('data-filter');
// combine filters
var filterValue = '';
for ( var prop in filters ) {
filterValue += filters[ prop ];
}
// set filter for Isotope
$container.isotope({ filter: filterValue });
});
// debounce so filtering doesn't happen every millisecond
function debounce( fn, threshold ) {
var timeout;
return function debounced() {
if ( timeout ) {
clearTimeout( timeout );
}
function delayed() {
fn();
timeout = null;
}
setTimeout( delayed, threshold || 100 );
}
}
如何解决这个问题?
注意:我使用jQuery 2.1.1.
在你的例子中,$('#filters').on('click', '.button', function ()
停止搜索功能,你重置按钮放置在#filtersdiv内,所以当你点击它时,搜索引擎也停止了。
我没有最好的解决方案,但它解决了一些问题:
使用函数回调引擎的想法:
var iso = function() {
//engine here
}
和
$(function () {
iso();
$('.iso').click(function(){
setTimeout(iso, 500);
});
});
如果没有setTimeout,它将无法工作。
但这并不能解决主要问题
看看FIDDLE,你就会明白我的意思了
或者你可以在#filtersdiv
我在实现过滤器+搜索功能时遇到了同样的问题。
我解决了这个问题,将过滤函数传递给搜索函数(function searchFilter(){...}
)中的同位素调用($container.isotope();
),而不是在初始化同位素实例时。
// No filter specified when initializing the Isotope instance
$container.isotope({
itemSelector : '.element',
masonry : {
columnWidth : 120
},
getSortData : {
name : function ( $elem ) {
return $elem.find('.name').text();
}
}
});
// Instead, the filter is specified here
function searchFilter() {
qsRegex = new RegExp( $quicksearch.val(), 'gi' );
$container.isotope({
filter: function() {
return qsRegex ? $(this).text().match( qsRegex ) : true;
}
});
}
相关文章:
- 用程序搜索JQuery数据表中的文本
- 在html Select中添加搜索
- Ajax Live搜索发布到Laravel视图
- 谷歌放置API:按国家或餐馆名称搜索餐馆
- 学生搜索项目jquery/javascript
- 用于搜索的聚合物嵌套绑定
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 在javascript中搜索具有重复值的两个数组中的匹配值
- Angularjs-utils高亮过滤器在搜索时破坏应用程序
- 使用javascript搜索具有用户输入的数组
- 淘汰搜索/筛选
- 添加'错误'消息发送到同位素.JS搜索筛选器
- jQuery同位素可搜索库
- 同位素搜索过滤器几乎想通了
- 应用搜索字段jQuery同位素
- 同位素+搜索+过滤与两个部分
- 同位素结合搜索和按钮与初始过滤器
- 如何使用同位素.js制作具有多个选择框的搜索过滤器
- 过滤器+搜索与同位素打破搜索
- 同位素组合过滤器的关键字和搜索