I am trying to implement Bootstrap Tokenfield with Jquery Ui autocomplete and so far i was able to do that except the fact that i am not able to prevent duplicates in the input field, so, unfortunately my user can choose the same value twice.
In my search i have found that Bootstrap Tokenfield has a way of preventing duplicate. However I do not know how to apply to my code because it looks to me that it goes with Twitter typeahead and not Jquery Ui.
How can i prevent duplicate with Bootstrap TokenField Using Jquery Ui autocomplete ?
This is my Bootstrap TokenField code based on jquery ui autocomplete
$('.tokenfield').tokenfield({
autocomplete: {
source: [
{
"id": "1",
"value": "Ferdine Faithfull"
},
{
"id": "2",
"value": "John Carta"
},
{
"id": "3",
"value": "Mezane Smith"
}
],
delay: 100
},
showAutocompleteOnFocus: true
});
And below is what i have found on Github to prevent duplicate though i think it is for Typeahead
$('#my-tokenfield').on('tokenfield:createtoken', function (event) {
var existingTokens = $(this).tokenfield('getTokens');
$.each(existingTokens, function(index, token) {
if (token.value === event.attrs.value)
event.preventDefault();
});
});
@Javier Your solution work good but sometimes it gets buggy and add twice the token! Have you got idea for this behaviour?
PS After seen the documentation i found the solution. Both event handling are needed. Because events are fired before and after creation/edit/remove of tokens.
So you need this to prevent the add (before create event)
And this other too, as you suggested, for the source-list (after create event)
NOTE: I changed the "check loop", (double for was overkilling), and added a check to avoid "capitalized" matching, just in case you need it.
This prevents listing items that have already been added as tokens:
This function is called after token is created or deleted to update the list. It uses JSON.stringify() to compare objects, and does the comparison for string objects and for {value: "foo", label: "bar"} source objects.
I think you've done it all, all you are left to do is to replace the class
So after the first code, instead of the second code write
The difference here is your class that has to be applied and it works both for Twitter Typeahead and Jquery Ui