我是前端开发的新手。我在我们的旧版.net应用程序中实现了搜索框。它工作正常,但需要改进。 我的搜索结果基本上会返回' a href' 标记。因此,用户可以直接点击它并开展工作。
问题:
例如:
如果我输入' 测试报告'它向我展示了正确的建议,但我可以在向下滚动时看到标记。
我在寻找什么:
例如:在上述情况下,我想查看“测试报告PSC'在文本框中,但同时'测试报告PSC'应该是可点击的。
请在这里指出正确的方向,谢谢。
代码: HTML文件
<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', '');
});});
答案 0 :(得分:1)
预先输入将准确显示您给出的值。在这种情况下,因为值<a href="blah" title="blah"> Actual Value </a>
正是您在建议列表中看到的。
我不知道你是否能够获得所有的行为,但这应该指向正确的方向。
修改getReportSearchLists()
以返回对象而不是字符串,例如:
[
{ "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>')
}
});