Search code examples
javascriptjqueryjquery-tokeninput

jQuery Tokeninput and the onFreeTaggingAdd callback


The jQuery plugin Tokeninput (master branch) (https://github.com/loopj/jquery-tokeninput) has a new feature for adding tags. Unfortunately this feature so far is best documented at Twitter: https://twitter.com/loopj/status/332249287062851585.

I'm trying to figure out how to use the onFreeTaggingAdd, but unfortunately I'm a jQuery and javascript newbie.

In short I would like the callback to take the output from my api and use it in the tokenbox. This way I would be able to modify the tag (lower case etc) and to add an id. I would also be able to replace it by another ID/tag if that's a policy suggested by the api.

Below, please see my code so far. I've tried several options to set item=data and return that value, but so far without success. Any help is appreciated!

onFreeTaggingAdd: function (item) {

$.post("../php/add_tagg_02.php", {tag: item, userid: "userid-dummy"} )
.done(function(data, status, xhr) {
alert ("Your suggested new tag " + data.name + " is entered in the database and will be considered for future use.");
console.log( data.name ); //returns the "new" name from the api
console.log( data.id ); //returns the id provided by the api
})
    return item; //returns the "old" name from the user input   
},

Solution

  • I believe the library sets a freetag's ID to the same as its name as a default, the only way to change that would be to edit the add_freetagging_tokens() method within the library.

    At the point it is called, the token is nothing more than a string, so to change the name, you could simply do this:

    onFreeTaggingAdd: function (item) {
    
    $.post("../php/add_tagg_02.php", {tag: item, userid: "userid-dummy"} )
    .done(function(data, status, xhr) {
    alert ("Your suggested new tag " + data.name + " is entered in the database and will be considered for future use.");
    console.log( data.name ); //returns the "new" name from the api
    console.log( data.id ); //returns the id provided by the api
    })
        return data.name; //Sets the tokens Name/ID to be the new name from the api.
    },
    

    If you did want to also customize the ID, it should be relatively simple to change the method to return an object, instead of a string.

    Also be aware that this token obviously won't be searchable for, unless you also update your data source.