From 45fcb12091acc28bbe9ee20efc33f3fed26dc0f4 Mon Sep 17 00:00:00 2001 From: Jay Levitt Date: Thu, 9 Jun 2011 11:25:50 -0400 Subject: [PATCH] handle autocompleteselected event properly, add placeholderColor setting --- README | 3 ++- jquery.tagsinput.js | 63 +++++++++++++++++++++++++++++---------------- 2 files changed, 43 insertions(+), 23 deletions(-) diff --git a/README b/README index 5a6967c..11b8a6c 100644 --- a/README +++ b/README @@ -89,6 +89,7 @@ $(selector).tagsInput({ 'onChange' : callback_function, 'removeWithBackspace' : true, 'minChars' : 0, - 'maxChars' : 0 //if not provided there is no limit + 'maxChars' : 0 //if not provided there is no limit, + 'placeholderColor' : '#666666' }); diff --git a/jquery.tagsinput.js b/jquery.tagsinput.js index f6cb3f9..5e7a896 100644 --- a/jquery.tagsinput.js +++ b/jquery.tagsinput.js @@ -18,12 +18,13 @@ var delimiter = new Array(); var tags_callbacks = new Array(); + var gotAutoComplete = false; $.fn.addTag = function(value,options) { var options = jQuery.extend({focus:false,callback:true},options); this.each(function() { id = $(this).attr('id'); - + var tagslist = $(this).val().split(delimiter[id]); if (tagslist[0] == '') { tagslist = new Array(); @@ -109,8 +110,20 @@ } $.fn.tagsInput = function(options) { - var settings = jQuery.extend({interactive:true,defaultText:'add a tag',minChars:0,width:'300px',height:'100px','hide':true,'delimiter':',',autocomplete:{},'unique':true,removeWithBackspace:true},options); - + var settings = jQuery.extend({ + interactive:true, + defaultText:'add a tag', + minChars:0, + width:'300px', + height:'100px', + 'hide':true, + 'delimiter':',', + autocomplete:{}, + 'unique':true, + removeWithBackspace:true, + placeholderColor:'#666666' + },options); + this.each(function() { if (settings.hide) { $(this).hide(); @@ -154,7 +167,7 @@ } if (settings.interactive) { $(data.fake_input).val($(data.fake_input).attr('data-default')); - $(data.fake_input).css('color','#666666'); + $(data.fake_input).css('color',settings.placeholderColor); $(data.holder).bind('click',data,function(event) { $(event.data.fake_input).focus(); @@ -168,28 +181,34 @@ }); if (settings.autocomplete_url != undefined) { - autocomplete_options = {source: settings.autocomplete_url} + autocomplete_options = {source: settings.autocomplete_url}; for (attrname in settings.autocomplete) { autocomplete_options[attrname] = settings.autocomplete[attrname]; } - $(data.fake_input).autocomplete(autocomplete_options).bind('result',data,function(event,data,formatted) { - if (data) - { - $(event.data.real_input).addTag(formatted,{focus:true,unique:(settings.unique)}); - } - }); + $(data.fake_input).autocomplete(autocomplete_options).bind('autocompleteselect',data,function(event,ui) { + gotAutoComplete = true; + $(event.data.real_input).addTag(ui.item.value,{focus:true,unique:(settings.unique)}); + return false; + }); - $(data.fake_input).bind('blur',data,function(event) { - if( $('.ac_results').is(':visible') ) return false; - if ( $(event.data.fake_input).val() != $(event.data.fake_input).attr('data-default')) { - 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:false,unique:(settings.unique)}); - } - - $(event.data.fake_input).val($(event.data.fake_input).attr('data-default')); - $(event.data.fake_input).css('color','#666666'); - return false; + + $(data.fake_input).bind('blur',data,function(event) { + setTimeout(function() { + if(gotAutoComplete == true) { + gotAutoComplete = false; + return false; + } + if ( $(event.data.fake_input).val() != $(event.data.fake_input).attr('data-default')) { + 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:false,unique:(settings.unique)}); + } + } + + $(event.data.fake_input).val($(event.data.fake_input).attr('data-default')); + $(event.data.fake_input).css('color',settings.placeholderColor); + }, 100); + return false; }); } else { @@ -202,7 +221,7 @@ $(event.data.real_input).addTag($(event.data.fake_input).val(),{focus:true,unique:(settings.unique)}); } else { $(event.data.fake_input).val($(event.data.fake_input).attr('data-default')); - $(event.data.fake_input).css('color','#666666'); + $(event.data.fake_input).css('color',settings.placeholderColor); } return false; });