2

我正在尝试以下代码来执行搜索,但它不起作用。在 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 请求的页面;我知道为什么它没有回来:因为我只返回sResultvar,它不包括 GameID。有没有办法在不显示的情况下返回 GameID 值?

第二件事:一旦返回自动建议,我如何从自动建议中获取一个值?假设我想获取 GameID,或者如果我不能这样做,在查询中使用“TitleName”?

我尝试以这种方式将其传递给表单:action="search.cfm?GameID=#cfautosuggestvalue.GameID#"- 但这不起作用。如何引用 autosuggestionvalue 变量以供使用?

谢谢

4

2 回答 2

1

不幸的是,您只能返回简单值的列表/数组。您不能同时返回名称和另一个键。有解决方法。如果您的姓名是唯一的,您可以在服务器上查找(即,将“Raymond”转换为 1),但这仅适用于唯一姓名。我有一个博客条目在这里详细介绍:

http://www.coldfusionjedi.com/index.cfm/2009/11/22/Ask-a-Jedi-ColdFusion-Autosuggest-on-2-Columns

于 2010-03-11T14:40:34.933 回答
1

如果您在prototype/scriptaculous 中使用afterUpdateElement 或在JQuery 中使用result() 函数,这将是可能的并且更直接。

以下示例均取自各自的站点

原型/脚本:

<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;
});
于 2010-04-22T19:38:51.223 回答