如何在autosuggest中显示额外的详细信息,但只在输入字段中显示ID?

时间:2012-06-17 20:13:36

标签: coldfusion autosuggest

我在我的UserID字段中使用ColdFusion autosuggest。当用户开始输入UserID时,会弹出用户ID列表和与之关联的用户名(由cfc函数填充)。示例代码:

<cfinput name="userID" type="text" value="#userID#" autoSuggest="cfc:Utilities.suggestUser({cfautosuggestvalue})" matchcontains="true" />

建议以&#34; User Name <userID>&#34;的格式列出。因此,如果用户将开始键入123,则弹出的示例建议将是&#34; Harvey Mann&lt; 1234&gt;&#34;。

问题在于,如果用户选择了该建议,我不想将整个建议的文本插入到输入字段中 - 我只想插入用户ID(&#34; 1234&#34; in这个案例)。如果可能的话,我还希望能够将用户名(&#34; Harvey Mann&#34;)插入到相邻的字段/区域中。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:4)

由于您使用的是CF内置的autosuggest实现,因此您只能访问一个返回值。因此,如果值由多个“部分”组成,并且您希望将值的不同“部分”插入到不同的列中,则必须解析该值并从字符串中提取适当的部分。在您的示例中,您可以将值视为由&lt;分隔的列表。在这种情况下,您可以使用

获取名称“part”
trim(listfirst(form.userID, "<"))

和id'part'与

replace(listlast(form.userID, "<"), ">", "")

或者,你总是可以使用jQuery UI Autocomplete实现 - 你必须为它编写自己的javascript,但是它提供了比内置cf的实现更多的控制。查看jQuery UI文档以获取更多信息:http://jqueryui.com/demos/autocomplete/

更新: 第二个想法,如果你只是想在同一页面的另一个区域显示选定值的'name'部分,你可以只能使用CF的内置自动提示和一些javascript来做到这一点。尝试将此代码添加到页面的HEAD部分:

<cfajaxproxy bind="javaScript:showName({userID})">
<script type="text/javascript">
showName = function(strUserId) {
 document.getElementById("someID").innerHTML = strUserId.split('<')[0];
}
</script>