ColdFusion 8 Autosuggest bug to watch out for

This post is more than 2 years old.

Here is an odd bug a reader ran into this weekend involving ColdFusion 8's new autosuggest feature. It was difficult to debug but ended up being quite trivial.

The reader was not using an Ajax call to load the data for the suggestion list. Instead he performed a query, used valueList twice, and supplied those lists to two autosuggest cfinput fields.

One worked fine, but the other threw a JavaScript error. The problem ended up being his data. His list included a record that had double quotes in it. Here is a simple example:

<cfset list = "apple,orange,peaches ""and"" cream,klingon birds of prey">

In this list, the 3rd item, peaches "and" cream, includes quotes. Notice that I've escaped the quotes for ColdFusion to parse it correctly. When you run a page that makes use of this...

<cfform name="foo"> <cfinput name="test" autosuggest="#list#"> </cfform>

You end up with this generated in the browser:

_cf_autosuggestarray="apple,orange,peaches "and" cream,klingon birds of prey".split(",");

What's sad about this is that ColdFusion could easily handle this for you. In fact, it provides multiple options. One, toScript, handles the quotes just fine:

<cfset list = "apple,orange,peaches ""and"" cream,klingon birds of prey"> <cfoutput> <script> var #toScript(list,"mylist")#; </script> </cfoutput>

This returns:

<script> var mylist = "apple,orange,peaches \"and\" cream,klingon birds of prey"; ; </script>

See how it is escaped? This bug doesn't exist if yo use Ajax to load the data. If I change my input field to this:

<cfinput name="test" autosuggest="url:test3.cfm?v={cfautosuggestvalue}">

And then simply do:

<cfset list = "apple,orange,peaches ""and"" cream,klingon birds of prey"> <cfoutput>#serializeJSON(list)#</cfoutput>

It works fine. Something to watch out for folks! (And I'm going to file a quick bug report now.)

Raymond Camden's Picture

About Raymond Camden

Raymond is a developer advocate for HERE Technologies. He focuses on JavaScript, serverless and enterprise cat demos. If you like this article, please consider visiting my Amazon Wishlist or donating via PayPal to show your support. You can even buy me a coffee!

Lafayette, LA