如果自动完成 Bootstrap 标签输入预输入中不存在,如何创建新标签
How to create new tags if not present in autocomplete Boostrap tags input typeahead
HTML:
<div class="category-container">
<input type="text" id="category" />
<div id='tes'>Check Value
</div>
</div>
JS:
var data = [{"id":1,"city":"Jakarta"},{"id":2,"city":"Washington"},{"id":3,"city":"Amsterdam"},{"id":4,"city":"Sydney"}]
var citynames = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('city'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
local: $.map(data, function (city) {
return {
id: city.id,
city: city.city
};
})
});
citynames.initialize();
$('.category-container > input').tagsinput({
typeaheadjs: [{
minLength: 1,
highlight: true,
},{
minlength: 1,
name: 'citynames',
displayKey: 'city',
valueKey: 'city',
source: citynames.ttAdapter()
}]
});
$(document).ready(function(){
$('#tes').click(function(){
console.log($('#category').val());
})
})
如果有value(例如Sydney,则输入ID的值,本例为4),如果没有value,则给出输入的字符串
示例:
如果我输入 Jakarta 和 Kairo 等新标签,那么输入的值将是 1,Kairo。
如何操作?
这里是fiddlehttps://jsfiddle.net/wug8mnss/
没有内置功能可以做到这一点,但您可以轻松地自己完成,只需重建 tagsinput val()
字符串,并插入现有值的 id
而不是值本身。
$('#tes').click(function(){
var newValues = [], values = $('#category').val().split(',')
function getVal(value) {
for (var i=0; i<data.length; i++) {
if (data[i].city == value) return data[i].id
}
return value
}
newValues = values.map(function(value) {
return getVal(value)
}).join(',')
console.log(newValues)
})
已更新 fiddle -> https://jsfiddle.net/wug8mnss/2/
例如这个控制台输出
1, Kairo, 4
而不是
Jakarta, Kairo, Sydney
HTML:
<div class="category-container">
<input type="text" id="category" />
<div id='tes'>Check Value
</div>
</div>
JS:
var data = [{"id":1,"city":"Jakarta"},{"id":2,"city":"Washington"},{"id":3,"city":"Amsterdam"},{"id":4,"city":"Sydney"}]
var citynames = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('city'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
local: $.map(data, function (city) {
return {
id: city.id,
city: city.city
};
})
});
citynames.initialize();
$('.category-container > input').tagsinput({
typeaheadjs: [{
minLength: 1,
highlight: true,
},{
minlength: 1,
name: 'citynames',
displayKey: 'city',
valueKey: 'city',
source: citynames.ttAdapter()
}]
});
$(document).ready(function(){
$('#tes').click(function(){
console.log($('#category').val());
})
})
如果有value(例如Sydney,则输入ID的值,本例为4),如果没有value,则给出输入的字符串
示例: 如果我输入 Jakarta 和 Kairo 等新标签,那么输入的值将是 1,Kairo。
如何操作?
这里是fiddlehttps://jsfiddle.net/wug8mnss/
没有内置功能可以做到这一点,但您可以轻松地自己完成,只需重建 tagsinput val()
字符串,并插入现有值的 id
而不是值本身。
$('#tes').click(function(){
var newValues = [], values = $('#category').val().split(',')
function getVal(value) {
for (var i=0; i<data.length; i++) {
if (data[i].city == value) return data[i].id
}
return value
}
newValues = values.map(function(value) {
return getVal(value)
}).join(',')
console.log(newValues)
})
已更新 fiddle -> https://jsfiddle.net/wug8mnss/2/
例如这个控制台输出
1, Kairo, 4
而不是
Jakarta, Kairo, Sydney