必须有一个更好的方法-改变搜索作为用户输入的变化
There must be a better way - change search as user input changes
我有一个搜索过滤器,它在用户向表单输入文本时隐藏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;
}
});
});
我认为必须有一个更简单的方法来处理这个问题,以便过滤器在用户输入或更改搜索文本时动态更新。有没有比我更有经验的人能帮我注意到我忽略了的显而易见的事情?非常感谢您的帮助。
看起来你需要一个setTimeout
和clearTimeout
。
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);
});
这样,每当用户按下一个键时,超时将从之前的按键中清除,代码将仅对当前按键执行。
如果你觉得更新不够快,可以减少毫秒数
相关文章:
- 从远程脚本获取用户IP
- 单击页面上的链接后高度发生变化
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- d3基于用户选择动态更新节点
- 同步调用,直到用户通过angular验证为访问者
- 使用javascript搜索具有用户输入的数组
- JavaScript:为什么不't将背景变化发送给用户's选择(简单)
- 为什么我的用户范围的自定义维度会根据过去的匹配而发生变化
- 范围变量以角度更新,但变化不会反映给用户
- JavaScript:当用户用鼠标选择文本时,观察文本选择长度的变化
- 文本区域-当用户编辑文本区域的内容时,文本颜色会发生变化
- 是否有一种有效的方法来传递用户端JS数据到后端c#,每次它的变化
- 必须有一个更好的方法-改变搜索作为用户输入的变化
- jquery检测文本框值的变化不是基于用户输入
- 改变地图类型的缩放变化与用户的鼠标
- 如何区分用户视图和编程视图的变化
- 没有用户输入的订阅反应性和出版物中不断变化的时间框架
- 用户在 Youtube v3 API 上的频道 ID 是否会发生变化
- 当用户在不同颜色的部分上滚动时,标志图像会发生变化
- 当有变化时,自动更新所有用户的HTML dom