Newsgroup: it.comp.lang.javascript
Titolo: Ajax - suggerimenti di compilazione

Salve a tutti,
ho realizzato il mio primo script che sfrutta Ajax per interrogare il
server mentre l'utente compila il campo di un form... e presentare
all'utente una lista di possibili valori (piu' avanti, li chiamero'
"alternative") che assomigliano a quello che sta digitando.
Insomma, quello che chiamano "type-ahead suggest".
In brevissimo, al momento funziona cosi':
1) La "tendina" con le alternative e' un DIV che contiene una serie di
SPAN (uno per ogni alternativa)
2) Quando l'utente preme il pulsante della tastiera UP o DOWN
(keyCode=38 o keyCode=40), viene modificata la proprieta'
"selectedSpan" dell'oggetto "menu" (che poi e' il DIV contenente i
vari span), aggiungendo 1 o sottraendo 1 a tale indice, a seconda che
sia premuta la freccia DOWN o UP.
3) Ogni volta che l'utente digita un tasto (tra cui, quindi, anche UP
o DOWN), viene chiamata una funzione che cicla tra tutti gli SPAN con
le alternative e, quando incontra quello il cui ID e' uguale al
"selectedSpan", cambia la sua classe di stile (dando appunto
l'impressione che sia stato selezionato).
4) Alla fine, quando l'utente preme INVIO, il valore dello SPAN
selezionato viene copiato nel campo di input.
Tutto funziona perfettamente. A parte una cosa: su Mozilla, quando si
preme il pulsante UP, oltre ad essere selezionata l'alternativa
superiore a quella corrente, il cursore lampeggiante nel campo di
testo si sposta indietro di un carattere!
Su IE non succede.. ma cmq su Mozilla risulta scomodo, perche' io
voglio che il cursore resti sempre alla fine del campo (cosi' che, se
l'utente decidera digitare ulteriori caratteri, questi siano -
correttamente - posizionati alla fine della stringa immessa in
precedenza).
Ho dunque 2 domande:
1) Come mai Mozilla ha questo comportamento? A voi e' mai successo?
2) C'e' un modo per modificare artificialmente la posizione del
cursore nel campo di input, cosi' da costringerlo a rimanere sempre
alla fine della stringa digitata dall'utente, anche quando si preme il
pulsante UP?
Grassie a tutti!!
Zark

 testo si sposta indietro di un carattere!
Bisognerebbe vedere il codice, per capire cosa non va. A naso, mi
vien da dire che non hai bloccato il comportamento di default del
browser. Poniamo ad esempio:
	<a href="#hello" onclick="alert('hello')">say hello</a>
Se fai click sul link, otterrai un messaggio e una volta cliccato
sull'"OK" vedresti che nell'URL del browser compare l'hash.
Questo perché il comportamento di default del click su un link, è
quello di eseguire l'href. Per evitare che accada:
	<a href="#hello" onclick="alert('hello');return false">say hello</a>
Per lo stesso scopo si può usare anche il metodo preventDefault()
dell'oggetto event (sui browser w3c compliant); mentre su IE puoi
usare la proprietà returnValue, sempre dell'oggetto event.
Tutto dipende da come hai impostato la gestione degli eventi. Nel
caso tu abbia fatto uso di framework JS di terzi, devi consultare
la documentazione relativa (che si spera forniscano).
Se invece hai cancellato l'evento, e quindi tutto il discorso che
ti ho fatto è stato inutile... :) Beh, in tal caso andrebbe visto 
il codice per capire effettivamente cosa non va. Altrimenti si va
un po' per tentativi.
-- 
~ "Un uomo è più 'grande' di un altro solo se sale sulle sue spalle."
(Bertold Brecht)


Grazie mille!
Il "preventDefault()" ha funzionato!
Tuttavia, ho dovuto chiamarlo sull'onKeyDown del campo di testo
(<input>), mentre tutto il mio script per dialogare col server e
mostrare le alternative di digitazione e' chiamato sull'onKeypUp.
A quanto pare, chiamare preventDefault() sull'onKeyUp e' troppo tardi,
perche' ormai il browser ha eseguito la risposta di default al
comportamento dell'utente (nel mio caso, spostare il cursore avanti o
indietro).
Grazie ancora! :D
Zark