如何避免显示JSON字符串与自定义类型提前
How to avoid to display JSON string with custom typeahead
我已经覆盖了预输入方法以启用AJAX调用(获得JSON对象结果,因为我需要显示字段name
和隐藏字段url
)。
但是这还不够,当用户带一些研究时,一切都工作得很好,但是如果你拿起一个结果,或者只是按下TAB
,有JSON字符串出现在输入中,类似于:
{
"name":"test",
"url":"http://mysite.com/test"
}
我只是想在输入中显示name
字段,就像我在dropbox
中通过覆盖highlighter
方法一样,但我不知道这是否可能。
highlighter: function (obj)
{
var item = JSON.parse(obj);
var query = this.query.replace(/['-'[']{}()*+?.,'''^$|#'s]/g, '''$&')
return item.name.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match)
{
return '<strong>' + match + '</strong>'
});
}
有办法做这个简单的事情吗?
我不明白他们提供的方法,我们可以重写,如果我们不能。
提前输入x默认情况下不允许存储或加载JSON数据。看起来你试图在highlighter
方法中使用JSON.parse
来解决这个问题,但是你可以覆盖一些类似于不同问题的方法。
你可以在Typeahead中覆盖几乎任何方法,但是你必须欺骗render
和select
,你需要从使用attr('data-value' ...)
更改为data('value' ...)
,就像我在另一个答案中所做的那样。
除此之外,您必须更改主动接触JSON对象的每个方法:highlighter
, matcher
, sorter
和updater
。
因为您只想在突出显示中显示名称,因此可以通过稍微修改render
来避免更改highlighter
:
typeahead.render = function(items) {
var that = this
items = $(items).map(function (i, item) {
i = $(that.options.item).data('value', item) // <- modified for data
i.find('a').html(that.highlighter(item.name)) // <- modified for .name
return i[0]
});
items.first().addClass('active')
this.$menu.html(items)
return this
};
忽略我在另一个答案中显示的select
,您仍然需要覆盖matcher
, sorter
和updater
,其中包括highlighter
,都可以通过传入选项完成:
var typeahead = $("#mytypeahead").typeahead({
matcher: function (item) {
return ~item.name.toLowerCase().indexOf(this.query.toLowerCase())
},
sorter: function (items) {
var beginswith = []
, caseSensitive = []
, caseInsensitive = []
, item
while (item = items.shift()) {
if (!item.name.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
else if (~item.name.indexOf(this.query)) caseSensitive.push(item)
// NOTE: they assume, by default, that all results contain the text
else caseInsensitive.push(item)
}
return beginswith.concat(caseSensitive, caseInsensitive)
},
updater: function(item) {
// NOTE: this is called when the user picks the option, so you can also
// use item.url here
return item.name
}
});
sorter
在您的覆盖source
方法调用process
之后被调用,这将启动其他所有内容。
相关文章:
- dataTables-如何自定义分页类型以显示最后一个页码后面的省略号,
- WooCommerce的“添加到购物车”按钮旁边的自定义按钮基于产品类型
- 在plone 5中将自定义的灵活性内容类型插入到tinymce编辑器中
- 是否排除节点中错误堆栈的第一行?/节点中的自定义错误类型
- 如何使用URL筛选wordpress自定义帖子类型
- Alfresco JavaScript,当文件上传到网站时,设置自定义类型属性
- 角度形状按钮自定义类型
- WordPress TinyMCE自定义按钮与输入类型编号
- 自定义AJAX数据类型
- 我可以在ebay中使用谷歌网页字体api或任何类型的自定义字体吗
- 如何在自定义帖子类型中添加自定义字段
- 使用 jQuery.load() 查询自定义帖子类型
- 用自定义类型包装 document.createElement()
- WordPress FAQ 手风琴自定义帖子类型 - 匿名函数问题.
- 在 Javascript 中从自定义类型写入数组
- Angular Formly自定义类型控制器在部署时失败
- 带有ID和自定义类型的动态JavaScript
- 我可以将CollaborativeString放入自定义类型中吗?
- 如何避免显示JSON字符串与自定义类型提前
- 为要添加到ng-repeat中的自定义类型的输入字段创建一个自定义指令