2012-03-07 6 views
7

i have nome della casella di testo txtEmailList, ho fornito l'elenco di completamento automatico per esso,jQuery completamento automatico con la lista <string> come Fonte

<asp:TextBox runat="server" ID="txtEmailList" CssClass="txtAutoComplete"> 

sceneggiatura di completamento automatico

$('#txtEmailList').autocomplete({ 
       source: function(request, response) { 
// this is the ajax call, which is running successfully 
        var msg = 
Assessments_JqueryAutoComplete.AutoComplete(request.term).value; //(ajaxpro functions) 
        response(msg.d); 
       } 

      }); 

uscita verrà come come questo (in Firebug mostra come semplice/testo), come posso allegare questo array alla proprietà sorgente. (Non posso usare il metodo $ .ajax, dato che ho bisogno di usare ajaxpro come regole dell'ufficio), così ottengo la lista di array di ritorno da una chiamata ajax, come faccio a legare il completamento automatico.

[ "Lista 1", "Lista 2", "Elenco 3", "Elenco 4"];/* // questa è la risposta di uscita da jquery (da firebug)

[AjaxPro.AjaxMethod(HttpSessionStateRequirement.ReadWrite)] 
public List<string> AutoComplete(string query) 
{ 
List<string> objLisItmes = new List<string>(); 
objLisItmes.Add("List 1"); 
objLisItmes.Add("List 2"); 
objLisItmes.Add("List 3"); 
objLisItmes.Add("List 4"); 
return objLisItmes; 
} 

questa è l'uscita piromane a intestazioni di risposta

cache-Controlno-cache Content-Lunghezza 40 Content-TypeText/plain; charset = utf-8 DateWed, 7 MARZO 2012 10:45:37 GMT Scade-1Pragmano-cache

+0

Credo che è necessario restituire ciò che si ottiene dal server ... – gdoron

+0

come? Ho già provato la risposta (msg.d) ma non viene visualizzato in completamento automatico –

+0

no ...Scrivi: 'return msg;' – gdoron

risposta

5

invece di restituire un elenco. Mi piacerebbe ritornare un array di stringhe come:

[AjaxPro.AjaxMethod(HttpSessionStateRequirement.ReadWrite)] 
public string[] AutoComplete(string query) 
{ 
    List<string> objLisItmes = new List<string>(); 
    objLisItmes.Add("List 1"); 
    objLisItmes.Add("List 2"); 
    objLisItmes.Add("List 3"); 
    objLisItmes.Add("List 4"); 
    return objLisItmes.ToArray(); 
} 
+0

cosa cambierà? Sarà d'aiuto, restituendo array? Come –

+0

L'elenco dovrebbe funzionare correttamente e sembra che si stia verificando l'elenco degli elementi. È possibile visualizzare l'html per la casella di testo? – JCherryhomes

+0

grazie :) in qualsiasi modo. ora, ma non mi viene l'idea del motivo per cui ToArray() è necessario qui? –

2

Invece di usare

$('#txtEmailList') 

provare a utilizzare

$('input[id$="txtEmailList"]') 

Dal momento che si sta utilizzando un TextBox controllo server il proprio ID per esso è più probabile finendo come qualcosa come "parentID1_parentID2_txtEmailList". Il codice sopra troverà l'input che ha un ID che termina con "txtEmailList".

Ecco come lo sto facendo nel mio progetto di test e funziona. Ovviamente non sto usando AjaxPro, quindi non sono sicuro di come lo faresti invece, ma forse ti darà qualche idea.

<script type="text/javascript"> 
     $(function() { 
      var element = $('input[id$="TextBox1"]'); 

      element.autocomplete({ 
       source: function (request, response) { 
        $.ajax({ 
         url: "Default.aspx/GetList", 
         data: "{ 'term': '" + request.term + "' }", 
         dataType: "json", 
         type: "POST", 
         contentType: "application/json; charset=utf-8", 
         dataFilter: function(data) { return data; }, 
         success: function (data) { 
          response($.map(data.d, function (item) { 
           return { 
            value: item 
           } 
          })) 
         } 
        }) 
       } 
      }); 
     }); 
    </script> 
+0

qual è il diff? come sto accedendo direttamente. ? penso che questa non sia la risposta. anche la sua entrata in funzione aperta di jquery autocomplete –

+0

Ho aggiornato la mia risposta per spiegare il diff – JCherryhomes

+0

non in vista griglia. per rendere così. è in una semplice casella di testo in un div, anche se ho controllato l'ID di rendering, è lo stesso di quello che ho dato nel selettore jquery. quindi problema sarà con il tipo di risposta credo –

1

non dovrebbe essere:

$('#txtEmailList').autocomplete({source: function(request, response) { 
    // this is the ajax call, which is running successfully 
    var msg = Assessments_JqueryAutoComplete.AutoComplete(request.term).value; //(ajaxpro functions) 
    response(msg); 
    } 

}); 

?

In caso contrario, suggerirei di utilizzare console.log (msg) per analizzare l'oggetto risposta, se possibile.

1

Assicurati solo che la tua chiamata AJAX stia tornando formato stringa valido come questo dummy example. Memorizzalo in una variabile. Quindi utilizzare per definire source proprietà come questa:

var availableValues = ["List 1","List 2","List 3","List 4"]; 
// var msg = Assessments_JqueryAutoComplete.AutoComplete(request.term).value; 
$("#txtEmailList").autocomplete({ 
    source: availableValues 
}); 
Problemi correlati