【发布时间】:2013-04-19 12:00:06
【问题描述】:
我想实现一种 jQuery 实时搜索。
但是在将输入发送到服务器之前,我想删除我的数组中包含 3 个或更少字符的所有项目(因为在德语中,这些词通常可以在搜索方面被忽略)
所以["this", "is", "a", "test"]变成["this", "test"]
$(document).ready(function() {
var timer, searchInput;
$('#searchFAQ').keyup(function() {
clearTimeout(timer);
timer = setTimeout(function() {
searchInput = $('#searchFAQ').val().match(/\w+/g);
if(searchInput) {
for (var elem in searchInput) {
if (searchInput[elem].length < 4) {
//remove those entries
searchInput.splice(elem, 1);
}
}
$('#output').text(searchInput);
//ajax call here
}
}, 500);
});
});
现在我的问题是在我的 for 循环中并非所有项目都被删除。 例如,如果我输入“这是一个测试”“是”被删除,“a”将保留。 JSFIDDLE
我认为问题在于 for 循环,因为如果我使用拼接删除一个项目,数组的索引会发生变化,所以它会继续使用“错误”索引。
也许有人可以帮助我吗?
【问题讨论】:
-
我不明白为什么这不应该在服务器端完成。请记住,用户总是有可能关闭 JavaScript。
-
@Blazemonger 你是对的,但两种方式都应该是可能的。服务器端和客户端。
-
在客户端做这件事有什么好处呢?在上传搜索字符串之前,您只删除了大约十几个字符,并且无论如何您都将重复检查服务器端。仅当您想在提交之前向用户返回错误时,这才值得。
-
好吧,我也想过这个问题,但可以说这对我来说更像是一种锻炼。事实上,让服务器完成工作更聪明,但我开始这样做并想要一个可行的解决方案;)
标签: javascript jquery arrays for-loop