2010-03-11 7 views
2

J'essaie le code suivant pour exécuter une recherche et cela ne fonctionne pas. Sur la page search.cfm, la seule valeur qui revient est la valeur que j'ai entrée dans le champ de recherche (même si je clique sur une valeur d'auto-suggestion, elle ne revient pas, seules les lettres que je tape moi-même reviennent).Comment saisir et utiliser une variable renvoyée par ValueList à partir d'un appel 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> 

requête dans 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> 

Deux choses: Tout d'abord, je voudrais obtenir le gameid revenir à la page faisant la demande AJAX; Je sais pourquoi il ne revient pas: Parce que je ne retourne que sResult var, ce qui n'inclut pas le GameID. Est-il possible de retourner la valeur GameID sans l'afficher?

La deuxième chose: Comment saisir une valeur à partir de la suggestion automatique une fois qu'elle est retournée? Dire que je veux saisir le GameID, ou si je ne peux pas le faire, le "TitleName" pour l'utiliser dans ma requête?

J'ai essayé de le passer à la forme de cette façon: action="search.cfm?GameID=#cfautosuggestvalue.GameID#" - mais cela ne fonctionne pas. Comment puis-je référencer les variables d'autosuggestionvalue à utiliser?

Merci

Répondre

1

Malheureusement, vous ne pouvez retourner une liste/tableau de valeurs simples. Vous ne pouvez pas retourner à la fois un nom et une autre clé. Il y a des solutions de contournement. Si vos noms sont uniques, vous pouvez le rechercher sur le serveur (par exemple, convertir "Raymond" en 1), mais cela ne fonctionne que pour les noms uniques. J'ai une entrée de blog qui va dans les détails ici:

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

+0

Merci Ray ... toutes les idées cependant, pourquoi la forme prend seulement dans mon entrée de clavier et pas la valeur de suggestion automatique? Par exemple, si je tape "m" et qu'un "engrenage en métal" apparaît, cliquer sur me mènera à search.cfm, mais quand je jette # forme # je reçois "m" et non "engrenage métallique" - pourquoi cette? – Mohamad

+1

Si vous vous connectez à onClick, il va envoyer 'm'. Si vous liez à onChange, il doit envoyer la dernière valeur modifiée dans le champ de saisie. – Henry

1

Si vous utilisez soit afterUpdateElement dans le prototype/scriptaculous ou le résultat() dans JQuery ce serait possible et beaucoup plus simple.

Les exemples suivants sont pris chacun de leurs sites respectifs

prototype/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; 
}); 
Questions connexes