javascript - 如果内容匹配,则在输入前搜索
问题描述
我有一个 typeahead.js 搜索,它搜索两个不同的类别(应用程序和联系人),每个类别都调用 json 文件的后端。我正在添加按应用程序和联系人 ID 搜索的功能,如果前三个字符分别为“OA-”或“OC-”,我希望阻止另一个触发。
searchTerms.typeahead {
hint: true
highlight: true
minLength: 3
}, {
name: 'applications'
displayKey: 'address'
valueKey: 'id'
source: searchApplications.ttAdapter()
templates:
header: '<h4 class="tt-header">Applications:</h34>',
suggestion: (data) ->
if data.external_code
'<div class="search-result-item">' + data.address + ' – ' + data.external_code + '</div>'
else
'<div class="search-result-item">' + data.address + ' <span class="btn btn-sm btn-id">OA-' + data.id + '</span></div>'
limit: 10
},
name: 'contacts'
displayKey: 'name'
valueKey: 'id'
source: searchContacts.ttAdapter()
templates: header: '<h4 class="tt-header">Contacts:</h4>',
suggestion: (data) ->
'<div class="">' + data.name + ' <span class="btn btn-sm btn-id">OC-' + data.id + '</span></div>'
limit: 10
如果前 3 个字符是“OA-”或“OC-”,如何阻止第二个运行?
解决方案
我最终想通了...
解决方案需要修改source: searchApplications.ttAdapter()
使用的 Bloodhound。
在new Bloodhound
函数中,我使用 prepare 来运行 beforeSend 操作:
search = new Bloodhound(
remote:
url: '/applications.json'
prepare: (query, settings) ->
settings.url = settings.url + '?query=' + query + '&search=true'
settings.beforeSend = (e) ->
if query.substr(0,3).toLowerCase() == 'oc-'
e.abort()
return settings
)
推荐阅读
- sql - 组织 SQL 脚本 - 最佳实践
- r - R - 避免使用 lubridate hms 和 ggplot 显示毫秒
- php - wordpress 插件致命错误:未捕获的错误:在 null 上调用成员函数 update()
- angular - Angular 4 - 向阻止滚动的“鼠标滚轮”事件添加了非被动事件侦听器。
- python - 将具有离散特征索引的数组传递给python中的mutual_info_classif
- javascript - 谷歌反应地图 - 如何更改控制颜色?
- batch-file - 如何删除不包括父文件夹和第一个子文件夹的文件夹?
- sql-server - 在 MS SQL 2016 上对 NewID() 奇怪的结果进行排序
- jquery - jQuery自动检测输入状态
- javascript - 如何删除数据表中的特定行?