我正在尝试实现tag-it输入,但我想限制用户只选择 自动完成框中的值。 我尝试使用源json覆盖beforeTagAdded事件并检查标记是否存在 在源属性但没有运气。
这是代码,请参阅beforeTagAdded函数。
$(document).ready(function () {
var itemId;
var theTags = $('#msg_to');
theTags.tagit({
autocomplete: {
source: [{ id: "1", value: 'David'}, { id: "2", value: 'John' }],
minLength: 0,
select: function (event, ui) {
itemId = ui.item.id;
theTags.tagit("createTag", ui.item.value);
}
},
showAutocompleteOnFocus: true,
afterTagAdded: function (event, ui) {
if (itemId) {
$(ui.tag).find('input').attr('name', "tag[\'" + itemId + "']['" + ui.tagLabel + "']");
itemId = null;
}
},
beforeTagAdded: function (event, ui) {
var id = ui.autocomplete.source; // not working
// what to do next?
}
})
});
</script>
提前致谢
答案 0 :(得分:5)
我的解决方案:
$(function() {
var currentlyValidTags = ['ac', 'dc'];
$('input[name="_tags"]').tagit({
availableTags: currentlyValidTags,
autocomplete: { source: function( request, response ) {
var filter = removeDiacritics(request.term.toLowerCase());
response( $.grep(currentlyValidTags, function(element) {
return (element.toLowerCase().indexOf(filter) === 0);
}));
}},
beforeTagAdded: function(event, ui) {
if ($.inArray(ui.tagLabel, currentlyValidTags) == -1) {
return false;
}
}
});
});
答案 1 :(得分:2)
以下适用于我:
var currentlyValidTags = [];
$('#tags').tagit({
autocomplete: {
source: function(req, resp) {
search(req, function(data) {
currentlyValidTags = data;
resp(data);
});
}
},
beforeTagAdded: function(event, ui) {
if (!_.contains(currentlyValidTags, ui.tagLabel)) {
return false;
}
}
});
上述解决方案适用于65d6fb4dad833bf490f2a7b27063ecd08f792ede
版本2.0(与版本v2.0
上的版本2.0不同)。
答案 2 :(得分:1)
有一个标签的分叉 - 它会做你想要的:
https://github.com/chrisleishman/tag-it
它有一个requireAutocomplete设置。
(我不得不合并两个版本,因为我需要各自的东西......但希望这会对你有帮助。)
答案 3 :(得分:0)
如果您正在寻找通过ajax自动完成,这是一个解决方案。
//this will be set true only if fetched via ajax and also selected from autocomplete
$.is_ajax_fetched = false;
在autocomplete
内你需要这些事件:
select: function( event, ui ) {
$.is_ajax_fetched = true;
return true;
},
//select event will not work alone as tag-it captures event to check for comma and other stuff
close: function( event, ui ) {
if($.is_ajax_fetched == true){
$('.ui-autocomplete-input').blur();
$('.ui-autocomplete-input').focus();
}
}
现在,在tag-it调用中,您需要在选项中添加调用事件:
beforeTagAdded: function(event, ui) {
if($.is_ajax_fetched != true){return false;}
},
afterTagAdded: function(event, ui) {
$.is_ajax_fetched = false;
},