2010-03-11 1 views
2

Я пытаюсь выполнить следующий код, чтобы выполнить поиск, и он не работает. На странице search.cfm единственное возвращаемое значение - это значение, которое я вводил в поле поиска (даже если я нажимаю значение автозапуска, оно не возвращается, только буквы, которые я на самом деле набираю, возвращаются).Как получить и использовать переменные, возвращающиеся через ValueList из вызова AJAX?

<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#" - но это не работает. Как я могу ссылаться на varaibles autosuggestionvalue для использования?

Благодаря

ответ

1

К сожалению, вы можете вернуть только список/массив простых значений. Вы не можете вернуть имя и другой ключ. Есть обходные пути. Если ваши имена уникальны, вы можете посмотреть это на сервере (т. Е. Преобразовать «Raymond» в 1), но это работает только для уникальных имен. У меня есть запись в блоге, который идет в подробности здесь:

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

+0

Благодаря Ray ... любые идеи, хотя, почему форма принимает только ввод на клавиатуре, а не значение auto-suggest? Например, если я набираю «m» и появляется «металлическая передача», нажатие на меня приведет к search.cfm, но когда я сброшу # форму #, я получу «м», а не «металлическую передачу» - почему что? – Mohamad

+1

Если вы привязываетесь к onClick, он отправит 'm'. Если вы привязываетесь к onChange, он должен отправить последнее измененное значение в поле ввода. – Henry

1

Если вы использовали либо afterUpdateElement в функции результат (а) в JQuery прототип/Scriptaculous или это было бы возможно, и намного более простым.

Следующие примеры каждый взяты из соответствующих сайтов

прототип/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; 
});