javascript - 必须有更好的方法 - 随着用户输入的变化而更改搜索

标签 javascript jquery forms input filter

我有一个搜索过滤器,当用户在表单输入中输入文本时,它会隐藏 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);
});

这样,每当用户按下下一个键时,前一个按键的超时时间就会被清除,并且代码只会针对当前的按键执行。

如果您觉得更新速度不够快,请减少毫秒数。

关于javascript - 必须有更好的方法 - 随着用户输入的变化而更改搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24629613/

相关文章:

JavaScript 仅接受 0 到 255 范围内的数字

javascript - 如何禁用 TextBox(如果它不为空) 通过页面加载上的 JavaScript

javascript - PHP触发从iframe到其他页面的提交

forms - 是否有使用 3 个选择框来选择 'Date of Birth' 的语义方式?

javascript - jquery .val() 返回未定义

php - Symfony2 : Two forms in a same page

Javascript Diff 算法不适用于 HTML 代码

javascript - 如何计算 openweathermap.org JSON 中返回的摄氏温度?

javascript - 如何在angularJS中将自动完成下拉列表作为网格?

jquery - 无法从 JQuery 自动完成选择选项中进行选择