Twitter bootstrap 如何改进搜索框中的提前键入建议
我是前端开发的新手。我已经在一个旧的遗留.net应用程序中实现了搜索框。它运行良好,但需要改进。 我的搜索结果基本上返回'a href'标记。因此用户可以直接点击它并完成他们的工作 问题:Twitter bootstrap 如何改进搜索框中的提前键入建议,twitter-bootstrap,typeahead.js,search-box,Twitter Bootstrap,Typeahead.js,Search Box,我是前端开发的新手。我已经在一个旧的遗留.net应用程序中实现了搜索框。它运行良好,但需要改进。 我的搜索结果基本上返回'a href'标记。因此用户可以直接点击它并完成他们的工作 问题: 每当用户在结果列表中滚动时,他们都会在列表中看到实际的“a href”标记 只有搜索结果的文本部分可单击,但不能单击整个突出显示区域 不知何故,“回车”不起作用 例如: 若我键入“测试报告”,它会显示正确的建议,但我可以在向下滚动时看到标记 我在寻找什么: 我不想在向下滚动结果时看到'a href'标
- 每当用户在结果列表中滚动时,他们都会在列表中看到实际的“a href”标记
- 只有搜索结果的文本部分可单击,但不能单击整个突出显示区域李>
- 不知何故,“回车”不起作用
- 我不想在向下滚动结果时看到'a href'标记,只想看到其中的文本值。同时,我需要保留这些标签,以便单击它,因为它会相应地将我重定向到所需的结果页面
- 当我按enter键时,它的行为应该与鼠标单击的行为相同
- 此外,我希望整个区域可点击,而不仅仅是结果的文本部分
<div class="app-header-icons pull-right">
<div class="app-header-icon app-search-icon">
<div class="app-header-search-container">
<label for="search" class="sr-only">Search</label>
<input class="typeahead form-control" id="search" type="search" autocomplete="off" placeholder="Start Searching..."/>
</div>
<i class="tem tem-search"></i>
</div>
</div>
搜寻
JS文件
$(document).ready(function () {
var substringMatcher = function (reportNames) {
return function findMatches(inputString, callbackFunc) {
var matches = [];
var substrRegex = new RegExp(inputString, "i");
$.each(reportNames, function (i, reportName) {
if (substrRegex.test(reportName)) {
matches.push({ value: reportName });
}
});
callbackFunc(matches);
};
};
//reportNames is an array
// reportName[0] = <a href="blah" title="blah"> Actual Value </a>
var reportNames = getReportSearchLists();
$("#search").typeahead({
hint: true,
highlight: true,
minLength: 3,
order: "asc"
},
{
name: "reportNames",
displayKey: "value",
source: substringMatcher(reportNames)
}).bind('typeahead:selected', function (obj, datum) {
$('.typeahead').typeahead('val', '');
});});
$(文档).ready(函数(){
var substringMatcher=函数(reportNames){
返回函数findMatches(inputString、callbackFunc){
var匹配=[];
var SUBSTREGEX=新的RegExp(输入字符串,“i”);
$.each(报告名、函数(i、报告名){
if(子关系测试(报告名称)){
匹配.push({value:reportName});
}
});
callbackFunc(匹配项);
};
};
//reportNames是一个数组
//报表名称[0]=
var reportNames=getReportSearchLists();
$(“#搜索”).typeahead({
提示:没错,
推荐理由:没错,
最小长度:3,
命令:“asc”
},
{
名称:“报告名称”,
显示键:“值”,
来源:子字符串匹配器(reportNames)
}).bind('typeahead:selected',函数(对象,基准){
$('.typeahead').typeahead('val','');
});});
typeahead将准确显示您给它的值。在本例中,由于值为
,因此这正是您将在建议列表中看到的内容
我不知道你是否能得到你想要的所有行为,但这应该为你指明正确的方向
修改getReportSearchList()
以返回对象而不是字符串,例如:
[
{ "title":"My Report","url":"/my/url/to/report" },
{ "title":"Other Report","url":"/my/url/to/report" },
{ "title":"Something Report","url":"/my/url/to/report" }
]
更新substringMatcher
以返回对象:
var substringMatcher = function (reportNames) {
return function findMatches(inputString, callbackFunc) {
var matches = [];
var substrRegex = new RegExp(inputString, "i");
$.each(reportNames, function (i, obj) {
if (substrRegex.test(obj.title)) {
matches.push(obj);
}
});
callbackFunc(matches);
};
};
使用模板显示建议:
$('.typeahead').typeahead({
highlight: true
}, {
name: 'reports',
display: 'title',
source: substringMatcher(reportNames),
templates: {
empty: [
'<div><strong>No match found</strong></div>'
].join('\n'),
suggestion: '<div class="card"><a href="' + obj.url + '"><strong>' + obj.title + '</strong></a></div>')
}
});
$('.typeahead')。typeahead({
推荐理由:没错
}, {
名称:'报告',
显示:“标题”,
来源:子字符串匹配器(reportNames),
模板:{
空的:[
“未找到匹配项”
].join('\n'),
建议:'')
}
});
reportNames的价值是什么?@whipdancer我修改了我的问题,以显示reportNames中有什么内容我尝试了这个解决方案,效果不错。但是现在它在向下滚动搜索结果时不会在搜索框中显示任何文本。我相信滚动建议列表不会在输入框中输入值,您仍然需要选择一些内容。您还可以修改建议html以查看可能产生的效果。如果您给定的解决方案是正确的,不知何故,我忘记了将displayKey属性更改为'title'(displayKey:'title',)