Newsgroup: it.comp.lang.javascript
Titolo: Autocompletamento e JQuery

Ciao a tutti
 
sto cercando di ottenere la funzione di autompletamento con jQuery ma ho 
bisogno che mi suggerisca un valore e che metta in un campo nascosto 
l'id di quello che sceglie l'utente.
Esempio:
se cerco le provincie italiane e l'utente digita in un campo di testo
"Ter"
lui suggerisce Terni e se l'utente sceglie Terni, nelcampo nascosto 
vorrei che ci vada a finire "TR"
 
E' possibile farlo in modo nativo con Jquery o serve un plug-in... e se 
si avete suggerimenti  ?
 
un saluto
 

ok
la versione 1.8 di jQuery UI fa l'autocompletamento (ero rimasto alla 1.4)
Ma ora ho un problema.
il formato JSon.
se lato server risponde: [ "Caserta", "Cesena" ] tutto ok, se invece 
vorrei distinguere l'etichetta dal valore :
[{ label: "Agrigento", value: "Ag" },{ label: "Roma", value: "Rm" }]
 
non mi mostra nulla..
perche' ?
 
 
 

se prendo i dati in locale in formato JSOn tutto funziona
 
$(function() {
$("#titoloPub").autocomplete({
source:[{label:"Teramo", valore:"TE"},{label:"Agrigento", 
valore:"AG"},{label:"Alessandria", valore:"AL"}],
 
minLength: 2,
     select: function( event, ui ) {
prendi( ui.item ?
"Selected: " + ui.item.label + " alias " + ui.item.valore :
"Nothing selected, input was " + this.valore );
}
});
});
 
se li faccio arrivare tramite Json , non ricevo nemmeno un  messaggio di 
errore.
Come si fa a vedere cosa arriva di ritorno dal server ?
 


io mi sono fatto un "wrapper" (diciamo cosi' !) intorno all'autocomplete
di jQuery proprio per questo scopo ... se vuoi ti mando il file.
 
-- 
Never try to teach a pig to sing.
It wastes your time and annoys the pig.

 Come si fa a vedere cosa arriva di ritorno dal server ?
 
Qualunque browser moderno ha un qualcosa o un plug-in che ti indica le 
chiamate che fai e i valori di ritorno (es. firefox, io li vedo con 
firebug)


Grazie, ti sarei molto grato.
Anche tu hai avuto problemi con i dati di arrivo dal server ?
 

 Anche tu hai avuto problemi con i dati di arrivo dal server ?
 
non faceva quello che stai cercando di fare anche tu ;-) avendo un elenco 
notevole di dati in alcune table del db, era improponibile mettere una 
SELECT chilometrica. E d'altro canto all'inserimento/aggiornamento dati mi 
servivano gli id per le foreign key e volevo evitare di dover controllare 
ogni volta casi di omonimia o simili che avrebbero bloccato la query con 
errori tipo 'more then one row ...'
 
cmq adesso ti mando il file via mail. magari non e' il massimo della
programmazione in js, ma fa il suo porco lavoro ;-)
 
ciao


 programmazione in js, ma fa il suo porco lavoro ;-)
 
p.s. indirizzo mail ?



Come si fa a vederlo con firebug ?


ops...
fice...@virgilio.it
 

 
fice...@virgilio.it
 
 
mail sent


 Come si fa a vederlo con firebug ?
 
Nel tab "console"

Ho risolto il problema e riporto la soluzione (per chi ci incappa)
 
Problema:
---------
Se uso la funzione di autocompletamento di JQuery () (uso jquery-1.6.4 e 
jquery-ui-1.8.18) con dati presi dal server dove viene restituita, per 
ogni record trovato, una coppia di valori : etichetta da mostrare  e id.
Per esempio: cerco dei titoli di libri e, quando l'utente sceglie il 
titolo da quelli proposti dall'autocompletamento , in realta' vado a 
popolare un campo nascosto con l'id del libro selezionato e nel campo di 
testo dove digita il titolo compare il titolo scelto.
 
1) Nella documentazione on line di JQuery c'e' un errore e quando si fa 
un esempio del codice JSON che il server dovrebbe fornire.
http://jqueryui.com/demos/autocomplete/
 
 
Expected data format
 
The data from local data, a url or a callback can come in two variants:
 
     An Array of Strings:
     [ "Choice1", "Choice2" ]
     An Array of Objects with label and value properties:
     [ { label: "Choice1", value: "value1" }, ... ]
 
mentre in realta' il formato del secondo esempio dovrebbe essere
[ { "label": "Choice1", "value": "value1" }, ... ]
 
Se si omettono le doppie virgolette per label o value, il client non 
accetta i dati.
 
2) Piccolo accorgimento aggiuntivo:
Quando selezionavo il titolo, nel campo di testo compariva sempre l'id 
del libro scelto e non il titolo. Per risolvere basta non mettere la 
parola value ma valore. In questo caso JQuery considera utilizzabile 
solo il label (che contiene il titolo) e nella proprieta' "valore" 
assegnate l'id.
[ {"label":"Reconciling The Optimal And Empirical Approaches T...", 
"valore":"2"},{...} ]
 
A questo punto, passate tutto il codice a una vostra funzione che si 
occupa di dare l'id al campo nascosto.
 
Riporto il codice di esempio:
 
*************
function prendi(et,vl){
  $("#idPub").attr("value",vl);	
}
 
$(function() {		
  $("#titoloPub").autocomplete({
  source: "paginaLatoServer.asp",
  minLength: 4,
  select: function(event, ui) {prendi(ui.item.label,  ui.item.valore);}
 
	});
});	
 
*************
 
Ps
fare attenzione perche' l'id del campo di testo (in questo caso 
"titoloPub") sul server viene inviato come "term" (non so per quale 
motivo) e quindi request.querystring("term") .. o fate secondo il vostro 
linguaggio.
 
sono a disposizione per domande o rettifiche
 
ciao a tutti