我正在尝试以下代码来执行搜索,但它无法正常工作。在search.cfm页面上,唯一返回的值是我在搜索字段中输入的值(即使我点击了自动提示值,它也没有回来;只有我自己输入的字母才会回来)。
<cfform class="titleSearchForm" id="searchForm" action="search.cfm?GameID=#cfautosuggestvalue.GameID#" method="post">
<fieldset>
<cfinput type="text" class="titleSearchField" name="TitleName" onChange="form.submit()" autosuggest="cfc:gz.cfcomp.search.AutoSuggestSearch({cfautosuggestvalue})">
<input type="button" class="titleSearchButton" value=" " />
</fieldset>
</cfform>
在CFC中查询:
<cfquery name="SearchResult" datasource="myDSN">
SELECT CONCAT(titles.TitleName, ' on ', platforms.PlatformAbbreviation) AS sResult, games.GameID
FROM
games
Inner Join platforms ON games.PlatformID = platforms.PlatformID
Inner Join titles ON titles.TitleID = games.TitleID
WHERE
UCase(titleName) LIKE Ucase('#ARGUMENTS.SearchString#%')
ORDER BY
titleName ASC;
</cfquery>
两件事:首先,我想让GameID回到发出AJAX请求的页面;我知道它为什么不回来:因为我只返回sResult
var,其中不包含GameID。有没有办法在不显示的情况下返回GameID值?
第二件事:一旦返回,如何从自动建议中获取值?假设我想获取GameID,或者如果我不能这样做,那么在我的查询中使用它的“TitleName”?
我尝试以这种方式将其传递给表单:action="search.cfm?GameID=#cfautosuggestvalue.GameID#"
- 但这不起作用。我如何参考autosuggestionvalue varaibles使用?
由于
答案 0 :(得分:1)
不幸的是,您只能返回简单值的列表/数组。您不能同时返回名称和其他密钥。有解决方法。如果您的名字是唯一的,您可以在服务器上查找(即将“Raymond”转换为1),但这仅适用于唯一名称。我有一篇博客文章详细介绍:
http://www.coldfusionjedi.com/index.cfm/2009/11/22/Ask-a-Jedi-ColdFusion-Autosuggest-on-2-Columns
答案 1 :(得分:1)
如果您在原型/ scriptaculous中使用afterUpdateElement或在JQuery中使用result()函数,那么这将是可能的,而且更直接。
以下示例均来自各自的网站
原型/ Scriptaculous的:
<ul>
<li id="1">your mom</li>
<li id="2">yodel</li>
</ul>
new Ajax.Autocompleter("autocomplete", "autocomplete_choices", "/url/on/server", {
afterUpdateElement : getSelectionId
});
function getSelectionId(text, li) {
alert (li.id);
}
JQuery的
var data = [ {text:'Link A', url:'/page1'}, {text:'Link B', url: '/page2'} ];
$("...").autocomplete(data, {
formatItem: function(item) {
return item.text;
}
}).result(function(event, item) {
location.href = item.url;
});