我的问题是,当用户在输入字段上搜索文本时,如何选择第一个过滤的匹配列表项?如果用户点击进入,则自动点击第一个选中的项目。我将非常感谢你的帮助。提前谢谢。
//pug file which displays dynamic list items. Each list item has href tag url link.
.row
.col-md-8.offset-md-2.pad
.form(class="form-row justify-content-center deparrSearchForm")
.form-group.col-md-8
input(type="text" class="form-control form-control-lg" id="fromStation" name="fromStation" placeholder="Type train station name & press enter")
for prop in stationName
ul(class="list-group text-center" id="mylist")
a(href="/train/search-deparrtrain-submit/"+prop.stationShortCode+'/'+prop.stationName)
li(class="list-group-item") #{prop.stationName}
// Jquery which filter my input search text and display list items
$("#fromStation").on("keyup", function() {
var searchText = $(this).val().toLowerCase();
$("#mylist li").filter(function(){
var text= $(this).text().toLowerCase();
if(text.indexOf(searchText) >= 0){
$(this).show();
}
else{
$(this).hide();
}
});
});
答案 0 :(得分:0)
我认为你应该在过滤函数中使用index
,如:
$("#mylist li").filter(function(index){
var text= $(this).text().toLowerCase();
if(text.indexOf(searchText) >= 0){
$(this).show();
}
else{
$(this).hide();
}
});
然后通过eq
找到$( this ).eq( index )
之类的元素做任何你想做的事。
或在过滤功能中使用$("#mylist").eq(index)
。
答案 1 :(得分:0)
我的解决方案:
对于输入字段按键功能,我传递事件,动态列表过滤功能我传递索引。
在过滤器函数中,我将已过滤列表项的索引值分配给临时数组。我得到了所有已过滤的列表项位置。现在我可以做任何我想做的事。对于我的情况,如果用户按回车键,我将显示第一个过滤的列表项。
Jquery代码:
$("#fromStation").on("keypress",function(e) {
var searchText = $(this).val().toLowerCase();
var temparr=[];
$("#mylist li").filter(function(index){
var text= $(this).text().toLowerCase();
if(text.indexOf(searchText) >= 0){
$(this).show().first();
temparr.push(index);
}
else{
$(this).hide();
}
});
if(e.which == 13){
$("#mylist li").eq(temparr[0]).click();
console.log(temparr);
return false;
}
});