2010-03-11 59 views
2

我在下面的代碼執行搜索,它不工作。在search.cfm頁面上,唯一返回的值是我輸入到搜索字段中的值(即使我單擊了一個自動提示值,它不會回來;只有實際輸入的字母纔會返回)。如何從AJAX調用中獲取並使用通過ValueList返回的變量?

<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> 

兩件事情:首先,我想獲得的遊戲ID回到使得AJAX請求的頁面;我知道爲什麼它不會回來:因爲我只返回sResult var,它不包含GameID。有沒有辦法在不顯示它的情況下返回GameID值?

第二件事:如何從返回的自動提示中獲取值?假設我想抓住GameID,或者如果我不能這樣做,那麼在我的查詢中使用「TitleName」?

我試着將它傳遞給表格:action="search.cfm?GameID=#cfautosuggestvalue.GameID#" - 但這不起作用。我如何引用autosuggestionvalue varaibles以供使用?

謝謝

回答

1

不幸的是,你只能返回一個簡單值列表/數組。你不能同時返回一個名字和另一個鍵。有解決方法。如果你的名字是唯一的,你可以在服務器上查看(例如,將「Raymond」轉換爲1),但只適用於唯一名稱。我有一個博客條目,在這裏進入細節:

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

+0

感謝雷...雖然任何想法,爲什麼形式只是在我的鍵盤輸入,而不是自動建議值?例如,如果我輸入「m」並顯示一個「金屬齒輪」,點擊會將我帶到search.cfm,但是當我轉儲#表格時#我得到「m」而不是「金屬齒輪」 - 爲什麼是那? – Mohamad 2010-03-11 15:49:39

+1

如果綁定到onClick,它會發送'm'。如果綁定到onChange,它應該在輸入字段中發送上次更改的值。 – Henry 2010-03-11 20:22:30

1

如果在原型/ Scriptaculous的或JQuery的結果()函數使用要麼afterUpdateElement這將是可能的,很多更直接。

下面的例子分別從各自的網站採取

原型/ 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; 
}); 
相關問題