必须有一个更好的方法-改变搜索作为用户输入的变化

There must be a better way - change search as user input changes

本文关键字:用户 变化 输入 搜索 有一个 更好 方法 改变      更新时间:2023-09-26

我有一个搜索过滤器,它在用户向表单输入文本时隐藏s。我需要它是动态的,这样当用户改变输入时,过滤器就会刷新。我通过在每次按键上清除过滤器来实现这一点,但这会导致过滤器延迟,并在快速输入单词时闪烁。你可以看到我在这里的意思:

http://cambridgefellows.com/directory-of-fellows/

这是我的jquery:
$(document).ready(function() {
   $('input[name=searchFilterInput]').val('');
   $('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 {
            }
        });
    }
   });

$('#searchForm').bind("keyup keypress", function(e) {
 var code = e.keyCode || e.which; 
  if (code  == 13) {               
    e.preventDefault();
     return false;
  }
});

});

我认为必须有一个更简单的方法来处理这个问题,以便过滤器在用户输入或更改搜索文本时动态更新。有没有比我更有经验的人能帮我注意到我忽略了的显而易见的事情?非常感谢您的帮助。

看起来你需要一个setTimeoutclearTimeout

var timer;
$('input[name=searchFilterInput]').keyup(function() {
    clearTimeout(timer);
    timer = setTimeout(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 {
                }
            });
        }
    }, 300);
});

这样,每当用户按下一个键时,超时将从之前的按键中清除,代码将仅对当前按键执行。

如果你觉得更新不够快,可以减少毫秒数