jQuery plugin providing a Twitter Bootstrap user interface for managing tags
Code on Github Bootstrap 2.3.2 Download
Just add data-role="tagsinput"
to your input field to automatically change it to a tags input field.
<input type="text" value="Amsterdam,Washington,Sydney,Beijing,Cairo" data-role="tagsinput" />
statement | returns |
---|---|
$("input").val() |
|
$("input").tagsinput('items') |
|
Use a <select multiple />
as your input element for a tags input, to gain true multivalue support. Instead of a comma separated string, the values will be set in an array. Existing <option />
elements will automatically be set as tags. This makes it also possible to create tags containing a comma.
<select multiple data-role="tagsinput">
<option value="Amsterdam">Amsterdam</option>
<option value="Washington">Washington</option>
<option value="Sydney">Sydney</option>
<option value="Beijing">Beijing</option>
<option value="Cairo">Cairo</option>
</select>
statement | returns |
---|---|
$("select").val() |
|
$("select").tagsinput('items') |
|
<input type="text" value="Amsterdam,Washington" data-role="tagsinput" />
<script>
var citynames = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: {
url: 'assets/citynames.json',
filter: function(list) {
return $.map(list, function(cityname) {
return { name: cityname }; });
}
}
});
citynames.initialize();
$('input').tagsinput({
typeaheadjs: {
name: 'citynames',
displayKey: 'name',
valueKey: 'name',
source: citynames.ttAdapter()
}
});
</script>
statement | returns |
---|---|
$("input").val() |
|
$("input").tagsinput('items') |
|
You can set a fixed css class for your tags, or determine dynamically by providing a custom function.
<input type="text" />
<script>
var cities = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('text'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: 'assets/cities.json'
});
cities.initialize();
var elt = $('input');
elt.tagsinput({
tagClass: function(item) {
switch (item.continent) {
case 'Europe' : return 'label label-primary';
case 'America' : return 'label label-danger label-important';
case 'Australia': return 'label label-success';
case 'Africa' : return 'label label-default';
case 'Asia' : return 'label label-warning';
}
},
itemValue: 'value',
itemText: 'text',
typeaheadjs: {
name: 'cities',
displayKey: 'text',
source: cities.ttAdapter()
}
});
elt.tagsinput('add', { "value": 1 , "text": "Amsterdam" , "continent": "Europe" });
elt.tagsinput('add', { "value": 4 , "text": "Washington" , "continent": "America" });
elt.tagsinput('add', { "value": 7 , "text": "Sydney" , "continent": "Australia" });
elt.tagsinput('add', { "value": 10, "text": "Beijing" , "continent": "Asia" });
elt.tagsinput('add', { "value": 13, "text": "Cairo" , "continent": "Africa" });
</script>
statement | returns |
---|---|
$("input").val() |
|
$("input").tagsinput('items') |
|
option | description | |
---|---|---|
tagClass |
Classname for the tags, or a function returning a classname
|
|
itemValue |
When adding objects as tags, itemValue must be set to the name of the property containing the item's value, or a function returning an item's value.
|
|
itemText |
When adding objects as tags, you can set itemText to the name of the property of item to use for a its tag's text. You may also provide a function which returns an item's value. When this options is not set, the value of
|
|
confirmKeys |
Array of keycodes which will add a tag when typing in the input. (default: [13, 188], which are ENTER and comma)
|
|
maxTags |
When set, no more than the given number of tags are allowed to add (default: undefined). When maxTags is reached, a class 'bootstrap-tagsinput-max' is placed on the tagsinput element.
|
|
maxChars |
Defines the maximum length of a single tag. (default: undefined)
|
|
trimValue |
When true, automatically removes all whitespace around tags. (default: false)
|
|
allowDuplicates |
When true, the same tag can be added multiple times. (default: false)
|
|
freeInput |
Allow creating tags which are not returned by typeahead's source (default: true)
This is only possible when using string as tags. When itemValue option is set, this option will be ignored.
|
|
typeahead |
Object containing typeahead specific options |
|
source |
An array (or function returning a promise or array), which will be used as source for a typeahead.
|
|
onTagExists |
Function invoked when trying to add an item which allready exists. By default, the existing tag hides and fades in.
|
method | description |
---|---|
add |
Adds a tag
Optionally, you can pass a 3rd parameter (object or value) to the add method to gain more control over the process. The parameter is exposed in the options attribute of the event.
Usage:
|
remove |
Removes a tag
Optionally, you can pass a 3rd parameter (object or value) to the remove method to gain more control over the process. The parameter is exposed in the options attribute of the event.
Usage:
|
removeAll |
Removes all tags
|
removeAll |
Removes all tags
|
focus |
Sets focus in the tagsinput
|
input |
Returns the tagsinput's internal <input />, which is used for adding tags. You could use this to add your own typeahead behaviour for example.
|
refresh |
Refreshes the tags input UI. This might be usefull when you're adding objects as tags. When an object's text changes, you'll have to refresh to update the matching tag's text.
|
destroy |
Removes tagsinput behaviour
|
event | description |
---|---|
beforeItemAdd |
Triggered just before an item gets added. Example:
|
itemAdded |
Triggered just after an item got added. Example:
|
beforeItemRemove |
Triggered just before an item gets removed. Example:
|
itemRemoved |
Triggered just after an item got removed. Example:
|