Fixed a bug when creating multiple tags-input in same page

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.
This commit is contained in:
Javier Toledo
2011-07-12 21:17:30 +01:00
parent f40465718b
commit ffac87c585
+18 -23
View File
@@ -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] == '') {
@@ -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;'),
@@ -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++) {
@@ -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
@@ -137,9 +132,9 @@
$(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',
@@ -147,7 +142,6 @@
fake_input: '#'+id+'_tag'
},settings);
delimiter[id] = data.delimiter;
if (settings.onAddTag || settings.onRemoveTag || settings.onChange) {
@@ -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) {
@@ -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;
}
});
@@ -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;
});
@@ -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});