在字段中使用带逗号的自动填充功能

时间:2013-06-28 22:14:36

标签: coldfusion autocomplete

我正在尝试使用带有逗号的字段的自动完成功能。当我输入逗号时它将忽略它,并且不会返回任何内容。到目前为止,我有这个:

index.cfm

<!--- A simple form for auto suggest --->
<cfform action="autosuggest.cfm" method="post">
  Artist: 
  <cfinput type="text" name="artist" size="50" autosuggest="cfc:autosuggest.findartist({cfautosuggestvalue})" autosuggestminlength="4" maxresultsdisplayed="5" /><br /><br />
</cfform>

autosuggest.cfc

<cfcomponent output="false">

    <!--- Lookup used for auto suggest --->
    <cffunction name="findartist" access="remote" returntype="string">
        <cfargument name="search" type="any" required="false" default="">

        <!--- Define variables --->
        <cfset var local = {} />

        <!--- Query Location Table --->
        <cfquery name="local.query" datasource="#application.datasource#" >
            select      DISTINCT artist
            from        items
            where       artist like <cfqueryparam cfsqltype="cf_sql_varchar" value="#ucase(arguments.search)#%" />
            order by    artist
        </cfquery>

        <!--- And return it as a List --->
        <cfreturn valueList(local.query.artist)>
    </cffunction>

</cfcomponent>

当我尝试搜索布朗时,詹姆斯并没有返回任何东西。我需要用什么来用逗号返回结果。

由于

1 个答案:

答案 0 :(得分:1)

一个选项是让函数返回一个数组,而不是一个字符串。然后分隔符不是问题。

   <cffunction name="findartist" access="remote" returntype="array">
      ...
      <cfreturn listToArray(valueList(local.query.artist, chr(30)), chr(30))>
   </cffunction>

更新:

正如雷蒙德指出的那样,唯一能够避免CF方面的分隔符问题的确定方法就是不使用它们。而是遍历查询以构建数组,即:

   <cffunction name="findartist" access="remote" returntype="array">
       ...
       <cfset local.arr = []>
       <cfloop query="local.query">
           <cfset arrayAppend(local.arr, local.query.artist)>
       </cfloop>

       <cfreturn local.arr>
   </cffunction>