Newsgroup: it.comp.lang.javascript
Titolo: Casella di riepilogo "a digitazione"

Innanzitutto salve a tutti, dato che č la prima volta che posto in questo
NG.
Premetto che di JS non so una cippa, quindi scusate se la domanda risulta
banale...
Ecco cosa vorrei fare:
Ho una casella di riepilogo con circa 200 nomi (e in aumento) al suo
interno... Quando apro la lista, In automatico, se io digito una lettera
sulla tastiera, la selezione va al primo nome iniziante con quella
lettera...
Il mio problema č rappresentato proprio dal fatto che su 200 nomi diversi,
puň essere lungo trovare il nome che si stava cercando. Esiste quindi un
modo (in JS presumo) per far sě che io possa digitare piů lettere
consecutive che mi ricercano cosě il nome in tempo reale?
La spiegazione č un po' contorta, ma ecco un esempio:
Nomi:
...
Federico
Francesco
Elisa
...
Ora, se digito "F", mi viene selezionato Federico, mentre se voglio
selezionare Francesco devo scendere con la freccetta... Io vorrei poter
digitare "F" "R" "A" in modo che la selezione si sposti su Francesco...
E' possibile?

Ti basta come inizio questo?
http://www.jsdir.com/staffscripts/script065/index.html
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M. -- 

Direi di si...forse risolve completamente il mio problema =)
Grazie mille

Ummm...ho ancora qualche problema...dovuto credo al fatto che non so
utilizzare JS, e che lo utilizzo insieme ad ASP...
La proprietą onKeyUp funziona anche se posta direttamente sulla casella di
riepilogo?

 casella di riepilogo?
Se intendi togliere la textbox e applicare la stessa logica alla select no,
non funziona...
Per questo ti ho scritto "un buon inizio"...
Dovresti, a grandi linee, onkeyup della select scrivere il valore nella
textbox hidden, cercare un valore che soddisfi le lettere digitate nella
select ed impostare il selectedIndex...resta poi il problema dell'errore (ho
digitato un carattere per sbaglio): premendo backspace la pagina con IE
torna alla precedente, per intercettarlo devi usare onkeydown anziché
onkeyup. Poi non sarebbe male gestire anche il tasto Canc per cancellare
tutte le digitazioni...


Allora...diciamo che qualcosa sono riuscito a fare (purtroppo non conosco il
JS, ma mi serve questa funzione =( )...
Devo un po' riprogettare la pagina, e credo proprio mi servirà l'aiuto di un
esperto... Dunque...
La pagina, in origine, era completamente in ASP. Quando selezionavo una voce
nella dropdown, tramite la proprietà onChange mi veniva caricata la stessa
pagina con una nuova dropdown sotto a quella precedente (inviavo una stringa
di interrogazione in modo da dire alla pagina che eravamo al secondo
caricamento)...selezionando una voce di questa nuova dropdown, stessa
storia, ne appariva un'altra a questa collegata (sempre ricaricandomi la
pagina).
Suppongo a questo punto di dover riportare tutto in JS, ma ovviamente non so
come fare (nè cosa cercare nelle guide a dir il vero), anche perchè si pone
un altro grosso problema: il tutto interagisce con un database....
Allora, diciamo che ho 2 tabelle in access: una Cognomi e una Nomi. In
quella Cognomi indico in un campo, per esempio, Rossi; in quella Nomi indico
i nomi degli appartenenti a quella famiglia (correlandoli poi alla tabella
Cognome)...
Quindi: Tabella Cognomi -> Rossi -> Tabella Nomi -> Mario | Filippo |
Francesco
Quello che devo far io è, se seleziono nella prima il cognome Rossi, far
apparire nella seconda dropdown solamente i nomi riferiti a quella famiglia
(impostati tramite DB).
Spero si capisca =)
Non pretendo certo mi spiegate come fare tutto questo, ma se poteste
indicarmi delle pagine "mirate" (come la precedente sulla ricerca nella
dropdown), mi fareste un enorme piacere.
Grazie

 conosco il JS, ma mi serve questa funzione =( )...
[CUT]
Quanti sono questi Cognomi? E questi Nomi? Ambiente intranet o internet?


 Ambiente intranet o internet?
Per ora intranet... però l'idea è che si possa utilizzare anche via internet

Allora,
io avevo scritto quanto sotto qualche tempo fa; lo ho provato e sembra
funzionare (blocca anche backspace).
Sicuramente è compatibile solo con IE perché usa l'oggetto window.event; va
sistemato per mozilla & Co.; non ho tempo di cercare come fare, ma penso che
se qualcuno in linea sa come fare è una stupidata.
Riccà si può aggiungere come faq al tuo sito?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<script language='JavaScript'>
 var debug=true;
 function cerca(s) {
  event.returnValue=false;
  switch(event.keyCode) {
   case 0: {break;}
   case 8: {
    if(s.getAttribute("tasti").length>0)
s.setAttribute("tasti",s.getAttribute("tasti").substr(0,s.getAttribute("tast
i").length-1));
    break;} //gestione backspace
   default:
   var t=String.fromCharCode(event.keyCode).toUpperCase();
   //se return esco, qua magari function per passare a focus successivo o
effettuare altre operazioni
   if(event.keyCode==13) return;
   event.keyCode=0;
   var tastiammessi="QWERTYUIOPASDFGHJKLZXCVBNM1234567890";
   if(tastiammessi.indexOf(t)==-1) {
    s.setAttribute("tasti","");
    s.selectedIndex=0;
 if(debug) window.status="";
    return false;
   }
   s.setAttribute("tasti",s.getAttribute("tasti")+t);
  } //switch keyCode
  for(var x=0;x<s.length;x++)
if(String(s.options[x].text).substr(0,String(s.getAttribute("tasti").length)
).toUpperCase()==String(s.getAttribute("tasti")).toUpperCase()) {
  s.selectedIndex=x;
  if(debug) window.status="Maschera di ricerca: "+s.getAttribute("tasti");
  return false;
  } //trovato
 //non trovato => cerco senza l'ultima lettera
 if(s.getAttribute("tasti").length>0) {
  //ricorsività
s.setAttribute("tasti",String(s.getAttribute("tasti").substr(0,String(s.getA
ttribute("tasti")).length-1)));
  cerca(s);
  return false;
  }
  //arrivato qua neanche la prima lettera va bene...
  s.selectedIndex=0;
  return false;
 }
</script>
<title>Select a selezione multitasto</title>
</head>
<body onload='document.forms["f"].elements["s"].focus()'>
<form name='f'>
<select name='s' tasti='' onblur='this.setAttribute("tasti","")'
onkeydown='cerca(this)'>
<option value=''>==>>Scegliere<<==</option>
<option value='A01'>A01 abitare</option>
<option value='A02'>A02 abitare</option>
<option value='A03'>A03 abitare</option>
<option value='AA1'>AA1 abitare</option>
<option value='F01'>F01 abitare</option>
<option value='FF3'>FF3 abitare</option>
<option value='FF4'>FF4 abitare</option>
<option value='Z11'>Z11 abitare</option>
<option value='000'>000 abitare</option>
<option value='999'>999 abitare</option>
</select>
</form>
</body>
</html>


 I cognomi sono una quindicina, mentre i nomi sono un centinaio
Carichi i dati in un array e li gestisci via script.
Per scrivere option dinamicamente in una select trovi esempi dappertutto,
p.e. 
jsdir.com
 .
Se invece pensi crescerą molto conviene passare a tecniche server-side; se
non vuoi ricaricare la pagina vedi xmlhttp (cerca su Microsoft o chiedi nel
newsgroup asp).
(ma scusa, questo cosa c'entra con la tua domanda iniziale?)


> (ma scusa, questo cosa c'entra con la tua domanda iniziale?)
Effettivamente non molto, ma ho seguito un, diciamo, percorso logico nella
mia mente =)
Cmq grazie per le risposte precise... parte del problema sono così riuscito
a risolverlo, e per il resto darò un'occhiata a quello che mi hai indicato.
Grazie ancora =)

Ok, grazie mille =) ...farň le prove necessarie.
Ciao