我在我的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;)插入到相邻的字段/区域中。有没有办法实现这个目标?
答案 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>