Skip to content

Commit

Permalink
Fixed a bug when creating multiple tags-input in same page
Browse files Browse the repository at this point in the history
Some variables used global scope, so each new instance of tagsInput overwrite them with its own values.
I have also added a preventDefault to the fake_input keypress event as I had some form submitting issues when using the plugin and "Optimized" the tagExist method.
  • Loading branch information
Javier Toledo committed Jul 12, 2011
1 parent f404657 commit ffac87c
Showing 1 changed file with 18 additions and 23 deletions.
41 changes: 18 additions & 23 deletions jquery.tagsinput.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@
var tags_callbacks = new Array();

$.fn.addTag = function(value,options) {
var options = jQuery.extend({focus:false,callback:true},options);
options = jQuery.extend({focus:false,callback:true},options);
this.each(function() {
id = $(this).attr('id');
var id = $(this).attr('id');

var tagslist = $(this).val().split(delimiter[id]);
if (tagslist[0] == '') {
Expand All @@ -32,11 +32,11 @@
value = jQuery.trim(value);

if (options.unique) {
skipTag = $(tagslist).tagExist(value);
var skipTag = $(tagslist).tagExist(value);
} else {
skipTag = false;
var skipTag = false;
}

if (value !='' && skipTag != true) {
$('<span>').addClass('tag').append(
$('<span>').text(value).append('&nbsp;&nbsp;'),
Expand Down Expand Up @@ -79,11 +79,10 @@
$.fn.removeTag = function(value) {
value = unescape(value);
this.each(function() {
id = $(this).attr('id');
var id = $(this).attr('id');

var old = $(this).val().split(delimiter[id]);



$('#'+id+'_tagsinput .tag').remove();
str = '';
for (i=0; i< old.length; i++) {
Expand All @@ -104,11 +103,7 @@
};

$.fn.tagExist = function(val) {
if (jQuery.inArray(val, $(this)) == -1) {
return false; /* Cannot find value in array */
} else {
return true; /* Value found */
}
return (jQuery.inArray(val, $(this)) >= 0); //true when tag exists, false when not
};

// clear all existing tags and import new ones from a string
Expand Down Expand Up @@ -137,17 +132,16 @@
$(this).hide();
}

id = $(this).attr('id')
var id = $(this).attr('id')

data = jQuery.extend({
var data = jQuery.extend({
pid:id,
real_input: '#'+id,
holder: '#'+id+'_tagsinput',
input_wrapper: '#'+id+'_addTag',
fake_input: '#'+id+'_tag'
},settings);


delimiter[id] = data.delimiter;

if (settings.onAddTag || settings.onRemoveTag || settings.onChange) {
Expand Down Expand Up @@ -198,8 +192,7 @@
$(data.fake_input).autocomplete(settings.autocomplete_url, settings.autocomplete);
$(data.fake_input).bind('result',data,function(event,data,formatted) {
if (data) {
d = data + "";
$(event.data.real_input).addTag(d,{focus:true,unique:(settings.unique)});
$('#'+id).addTag(data + "",{focus:true,unique:(settings.unique)});
}
});
} else if (jQuery.ui.autocomplete !== undefined) {
Expand Down Expand Up @@ -228,11 +221,12 @@

}
// if user types a comma, create a new tag
$(data.fake_input).bind('keypress',data,function(event) {
$(data.fake_input).bind('keypress',data,function(event) {
if (event.which==event.data.delimiter.charCodeAt(0) || event.which==13 ) {
event.preventDefault();
if( (event.data.minChars <= $(event.data.fake_input).val().length) && (!event.data.maxChars || (event.data.maxChars >= $(event.data.fake_input).val().length)) )
$(event.data.real_input).addTag($(event.data.fake_input).val(),{focus:true,unique:(settings.unique)});
return false;
}
});
Expand All @@ -247,9 +241,10 @@
last_tag = last_tag.replace(/[\s]+x$/, '');
$('#' + id).removeTag(escape(last_tag));
$(this).trigger('focus');
};
}
});
$(data.fake_input).blur();

} // if settings.interactive
return false;
});
Expand All @@ -259,13 +254,13 @@
};

$.fn.tagsInput.updateTagsField = function(obj,tagslist) {
id = $(obj).attr('id');
var id = $(obj).attr('id');
$(obj).val(tagslist.join(delimiter[id]));
};

$.fn.tagsInput.importTags = function(obj,val) {
$(obj).val('');
id = $(obj).attr('id');
var id = $(obj).attr('id');
var tags = val.split(delimiter[id]);
for (i=0; i<tags.length; i++) {
$(obj).addTag(tags[i],{focus:false,callback:false});
Expand Down

0 comments on commit ffac87c

Please sign in to comment.