在Joomla中使用bootstrap。我试过寻找一个解决方案,并在这里尝试了一些不同的答案,但似乎无法让它工作。
到目前为止,我已经得到以下内容以返回名称,但我希望它在搜索输入中发送id而不是名称。
这是我到目前为止通过php打印的内容:
jQuery(document).ready(function() {
var artistData = [{"id":"3","artist_name":"DJ One"},{"id":"2","artist_name":"DJ Two"},{"id":"1","artist_name":"Another DJ"}];
jQuery('#artist_id').typeahead({
source: function(query, process) {
artists = [];
ids = {};
jQuery.each(artistData, function(id, artist) {
ids[artist.artist_name] = artist.id;
artists.push(artist.artist_name);
});
process(artists);
},
matcher: function (item) {
if (item.toLowerCase().indexOf(this.query.trim().toLowerCase()) != -1) {
return true;
}
},
sorter: function (items) {
return items.sort();
},
updater: function (item) {
selectedArtist = item.id;
return item;
}
});
});
我尝试过各种各样的问题,但这至少会返回artist_name
,但显然会抛出一个mysql错误。如果我在输入中键入id号就可以了。
我只需要弄清楚如何在提交时将值更改为id。任何帮助表示赞赏。
答案 0 :(得分:0)
我意识到这可能已经很晚了,但这里发生了一些错误:
selectedArtist
的位置,因为它没有被任何可见的定义。matcher
中,return
永远不会false
。这可能实际上是巧合,因为JavaScript会将undefined
视为false
。artistData
的努力,但你实际上从未实际使用过该函数之外的任何数组(在这种情况下应该用var
声明而不是将它添加到全局对象不使用var
)。artists
数组传递给process
,因此在此之后传递的任何item
将只是该数组所包含的个人string
;它不是原始数组中的JSON对象。从那里,您可以参考my answer on an otherwise similar question。 Typeahead 2.x默认情况下不支持使用JSON对象,但如果您覆盖render
和select
方法,它们确实支持使用它们,您必须当前作弊这些方法(在其他答案中显示) )。
最后,您可以使用原始JSON updater
(例如item
)在{"id":"3","artist_name":"DJ One"}
内执行任何操作。因此,你应该return item.artist_name
,并且可能会设置一些全局(我想你可能已经尝试这样做)到item.id
的值来跟踪实际选择的内容。
另请注意:如果 - 在用户从生成的预先输入列表中选择item
后 - 他们在数据库中不存在的艺术家中输入,那么您< em>应取消设置您在updater
中设置的全局,以避免声明id
- 无论如何(例如,3)代表他们刚输入的未知艺术家。