2012-06-17 10 views
1

我为我的UserID字段使用ColdFusion自动建议。当用户开始键入UserID时,会弹出一个用户ID和与其关联的用户名称列表(由cfc函数填充)。示例代码:如何显示自动提示中的额外详细信息,但输入字段中只有ID?

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

这些建议以格式“User Name <userID>”列出。因此,如果用户开始输入123,则会弹出的示例建议是“Harvey Mann < 1234>”。

问题是,如果用户选择该建议,我不想将整个建议的文本插入到输入字段中 - 我只想插入用户标识(本例中为“1234”)。如果可能,我还希望能够将用户名(“Harvey Mann”)插入相邻的字段/区域。有什么办法可以做到这一点?

回答

4

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

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

trim(listfirst(form.userID, "<")) 

和ID“部件”获取名称“部分”或者,你可以随时使用jQuery UI自动完成实施 - 你必须写你自己的javascript,但它比内置的cf实现更具有控制能力。检查jQuery UI的文档的更多信息:http://jqueryui.com/demos/autocomplete/

UPDATE: 退一步讲,如果你只是想在同一个页面上的其他区域,以显示选定值的“名称”部分,你可能能够用做只是CF的内置自动建议和一点的JavaScript。尝试将此代码添加到页面的HEAD部分:

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

非常感谢!这很棒。它甚至不是正则表达式:)(我希望有可能会返回单独的值,但怀疑不会有......) – froadie