【问题标题】:How can I get these two filtering methods to work concurrently?如何让这两种过滤方法同时工作?
【发布时间】:2014-08-26 19:35:11
【问题描述】:

我正在开发人员列表的搜索功能。我目前有两种方法可以过滤列表(这是一个数据表) - 一种方法是搜索过滤器,另一种是可用选项的下拉菜单。你可以在这里看到这个: http://cambridgefellows.com/directory-of-fellows/

搜索功能使用此代码:

    $(document).ready(function() {
       $('input[name=searchFilterInput]').keyup(function() { 
                var searchFilterVal = $('input[name=searchFilterInput]').val();
        searchFilterVal = searchFilterVal.replace(/ /g, '-');
        searchFilterVal = searchFilterVal.toLowerCase();

        if(searchFilterVal == '') {
            $('tr.hide').fadeIn('slow').removeClass('hide');
        } else {

            $('tr.fellows').each(function() {
            var pattern = $(this).attr('class');    // the pattern to be matched 
            var match = pattern.match(searchFilterVal);//If pattern matches it returns the match

            if(!match) {
                    $(this).fadeOut('normal').addClass('hide');

                } else {
                    $(this).fadeIn('slow').removeClass('hide');
                }
            });
        }
   });
});

下拉过滤器使用此代码:

$(document).ready(function() {
    $('ul#filter a').click(function() {
        $(this).css('outline','none');
        $('ul#filter.current').removeClass('current');
        $(this).parent().addClass('current');

        //var filterVal = $(this).text().toLowerCase().replace(' ','-');

        var filterVal = $(this).text();
        filterVal = filterVal.replace(/ /g, '-');
        filterVal = filterVal.toLowerCase();

        if(filterVal == 'all') {
            $('tr.hidden').fadeIn('slow').removeClass('hidden');
                            $('tr.hide').fadeIn('slow').removeClass('hide');
                        $('#searchFilterID').val('');
        } else {

            $('tr.fellows').each(function() {
                if(!$(this).hasClass(filterVal)) {
                    $(this).fadeOut('normal').addClass('hidden');
                } else {
                    $(this).fadeIn('slow').removeClass('hidden');
                }
            });
        }

        return false;
    });
});

我的问题是:我怎样才能让它们一起发挥作用?我现在不明白为什么他们不这样做。我需要能够用一个过滤器过滤列表,然后再用第二个过滤器过滤它。例如,我可能想使用下拉菜单仅选择“公共领导中心阿联酋领导倡议研究员”奖学金,然后通过输入“conf”一词来进一步优化我的搜索,将长列表缩小到只有 Tarig Hilal ,谁在焦点领域有“冲突”这个词。但是,现在当我开始使用搜索字段缩小范围时,下拉过滤器执行的过滤不再影响列表。

我想我理解它为什么不起作用,但我不知道如何重新安排我的逻辑以使它们一起工作。我喜欢一些建议!谢谢你。

编辑:我通过从两个过滤器中删除“else”函数并在最初调用每个过滤器时删除“隐藏”类来实现这一点。它有效,但以一种非常“闪烁”的方式 - 这有点奇怪。一定会有更好的办法。我绝对会重视任何建议。

$(document).ready(function() {
$('ul#filter a').click(function() {
    $('tr.hidden').fadeIn('slow').removeClass('hidden');
    $(this).css('outline','none');
    $('ul#filter.current').removeClass('current');
    $(this).parent().addClass('current');

    //var filterVal = $(this).text().toLowerCase().replace(' ','-');

    var filterVal = $(this).text();
    filterVal = filterVal.replace(/ /g, '-');
    filterVal = filterVal.toLowerCase();

    if(filterVal == 'all') {
        $('tr.hidden').fadeIn('slow').removeClass('hidden');
                    $('tr.hide').fadeIn('slow').removeClass('hide');
                    $('#searchFilterID').val('');
    } else {

        $('tr.fellows').each(function() {
            if(!$(this).hasClass(filterVal)) {
                $(this).fadeOut('normal').addClass('hidden');
            } else {
            }
        });
    }

    return false;
});
});

$(document).ready(function() {
       $('input[name=searchFilterInput]').keyup(function() { 
    var searchFilterVal = $('input[name=searchFilterInput]').val();
    searchFilterVal = searchFilterVal.replace(/ /g, '-');
    searchFilterVal = searchFilterVal.toLowerCase();
    $('tr.hide').fadeIn('slow').removeClass('hide');

    if(searchFilterVal == '') {
        $('tr.hide').fadeIn('slow').removeClass('hide');
    } else {

        $('tr.fellows').each(function() {
        var pattern = $(this).attr('class');    // the pattern to be matched 
        var match = pattern.match(searchFilterVal);//If pattern matches it returns the match

        if(!match) {
                $(this).fadeOut('normal').addClass('hide');

            } else {
            }
        });
    }
   });
});

【问题讨论】:

    标签: jquery wordpress filter


    【解决方案1】:

    让一个过滤器方法调用另一个过滤器,提供必要的参数。

    【讨论】:

    • 这听起来很有希望——但我不确定我会怎么做。通过从每个过滤器中删除else,我确实让它工作了。但随后用户必须在每次搜索后重置。但这是朝着正确方向迈出的一步。
    • 你说的已经可以了,我已经检查过了,请再检查一次。
    • 我编辑了我的原始问题,以包括我所做的确实使过滤器能够协同工作 - 但是因为我正在清除每个按键上的过滤器,所以如果你输入,会有一些闪烁和轻微延迟许多字符进入搜索字段。这让我想知道是否没有比我迄今为止汇总的更优雅的解决方案。但我会将问题标记为已回答,因为它至少有效。
    猜你喜欢
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 2023-03-13
    • 2018-02-11
    • 1970-01-01
    相关资源
    最近更新 更多