Newsgroup: it.comp.lang.javascript
Titolo: digit in javascript

Ciao a tutti, ho bisogno di un aiuto.
Devo intercettare la digitazione del carattere '@' e del carattere '&'.
Nel primo caso devo impedirne la digitazione nel secondo devo
ammetterla.
La situazione è questa: Riesco ad intercettare il keycode del tasto
altgr che è
17. Quindi...
if (keycode==17){
	event.cancelBubble = true;
	event.keyCode = 0;
	event.returnValue = false;
	return false;
}
Mi aspetto a questo punto di non poter digitare la chiocciola....invece
si.
Il key code della chiocciola è 64 ma anche sapendo questo riesco
comunque a digitarla.
Come posso fare?
Per quanto riguarda la '&'(e commerciale), questa non viene digitata
perchè ha un
keycode che fa parte di un range di valori non ammessi. Dovrei
isolarla....come faccio?
Vi prego aiutatemi. 
Grazie mille
macistina

 perchè ha un keycode che fa parte di un range di valori non ammessi.
la & corrisponde a 38, in che senso fa parte di un range non ammesso?
rae

...hai ragione....
Ho un input type = "text". In questo campo non devono essere ammessi
una serie
di caratteri speciali. Quando vado a digitarli questi non vengono
scritti.
Per questo caso il controllo che esiste e funziona è il seguente:
var keycode = window.event.keyCode;
for( var i=0; i < ShiftCodes.length; i++ )
{
if( (keycode == ShiftCodes[i]) && window.event.shiftKey ) {
alert("Non si può");
event.cancelBubble = true;
event.keyCode = 0;
event.returnValue = false;
return false;
}
}
Quindi i tasti abbinati allo shift vengono annullati: è compresa
quindi anche la '&'.
Vorrei poter digitare questo carattere. Come faccio?
Nello stesso contesto invece voglio escludere il carattere '@'
chiocciola.....
Grazie mille per il tentativo di aiuto....spero che vada in porto
raenkrus ha scritto:


 chiocciola.....
forse ti conviene cambiare approccio, usa le regexp per controllare
i caratteri inseriti.
rae

 chiocciola.....
a naso ti conviene ricostruire la logica, magari espandendo l'array per
includere anche se occorre verificare o meno lo shift; ma, senza sapere
quanti e di che tipo sono i valori contenuti in ShiftCodes, si può solo
ipotizzare.
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.

 Grazie mille per il tentativo di aiuto....spero che vada in porto
Su due piedi, il metodo più semplice che mi viene in mente è il suguente:
<script type="text/javascript">
	function allowedChars( evt ){
		var ch = String.fromCharCode(evt.charCode||evt.keyCode);
		return !("@#_".indexOf(ch)>-1);
	}
</script>
Ovviamente la stringa "@#_" rappresenta la serie di caratteri che non vuoi
che vengano "sentiti". Va da sé che se non si tratta di una manciata di
caratteri senza alcuna relazione tra loro, ma di insieme più definiti e
grandi (tipo escludere tutte le lettere maiuscole e i numeri), ti conviene
usare una regexp assieme al metodo test al posto di una stringa e
dell'indexOf.
 
E nell'HTML qualcosa tipo:
	<input type="text" onkeypress="return allowedChars(event)" />
Premesso che trovo questo genere di controlli abbastanza inutili, messi in
questo modo, perché se l'utente vuole infilarci dei caratteri non ammessi
gli basta fare un copy&paste o un drag&drop dei suddetti caratteri.
Quindi vanno bene come "facilities", ma poi si dovrebbe sempre ricontrollare
la validità di ciò che è stato immesso in tale campo almeno nell'onblur ( se
rimaniamo client-side ).
-- 
~ "Viviamo dei vuoti lasciati da qualcun'altro."

Ora vi mando il codice che ho scritto.
Ho utilizzato le regexp, ma rimangono alcuni problemi.
Ad ogni lettere digitata si esegue il controllo quindi nel caso in cui
la lettere non è ammessa faccio la substring del contenuto della text
per estrarre
l'ultimo carattere digitato e lo rimpiazzo con una stringa vuota.
La cosa fondamentale è che il 'filtroNormalChar' non contempla le
lettere accentate e quelle
degli altri alfabeti...tipo la 'ç' o altre che per il mio lavoro sono
indispensabili.
Come posso integrarle nel filtroNormalChar purtroppo non sono
sicurissima della sitassi di queste
regular expression. Mi aiutate? Grazie tante per l'aiuto ricevuo fino
ad ora
function manageRegularExpression(filterAt,filterComm,obj){
	 var deleteChar=false;
	 var filtroAt = /^\@$/;
   var filtroComm = /^&$/;
   var filtroNormalChar=/^[a-zA-Z_]$/;
   //Test se non deve essere digitata la chiocciola
   if(filterAt){
   	if (filtroAt.test(obj.value))deleteChar=true;
   }
	 if
(!filtroNormalChar.test(obj.value.substring(obj.value.length-1,obj.value.length)))deleteChar=true;
   //Test se non può essere ammessa la e commerciale(&)
   if(filterComm){
   	if
(filtroComm.test(obj.value.substring(obj.value.length-1,obj.value.length)))
      deleteChar=false;
   }
if(obj.value.substring(obj.value.length-1,obj.value.length).charCodeAt()==32)deleteChar=false;
   if(deleteChar==true)
		obj.value=obj.value.replace(obj.value.substring(obj.value.length-1,obj.value.length),"");
}
ZER0 ha scritto:


 l'ultimo carattere digitato 
Mi sembra che tu stia inutilmente complicandoti la vita. E poi, se uno si
sposta con i tasti cursore all'interno della textbox e digita un carattere?
Questo approccio non funzionerebbe, anzi, sballerebbe il valore della
textbox.
-- 
~ "Il debito pubblico è abbastanza grande da badare a sé stesso."
(Ronald Regan)

Copio il codice così come me lo hai proposto?
ZER0 ha scritto:


ZERO il tuo metodo non funziona nell'intercettazione dei due caratteri
che mi stanno mandando in crisi. & e @!!!!
uffffffffffffffffffffff!!!!!!
Grazie ugualmente!!!!
macistina ha scritto:


 che mi stanno mandando in crisi. & e @!!!!
Premesso che "non funziona" in informatica vuol dire poco o nulla (si ha
sempre un risultato, anche se non è quello che si desidera), il codice a
titolo di esempio che ti ho fornito, preso e incollato in una pagina vuota,
direi che funziona abbastanza bene:
 
http://beats.daily.it/iclj/keypress.htm
In questo caso, come scritto chiaramente nel post in cui te l'ho fornito,
"la stringa '@#_' rappresenta la serie di caratteri che non vuoi
che vengano 'sentiti' ". Quindi in quel caso blocca il carattere @,# e _.
Per bloccare altri caratteri devi aggiungerli alla suddetta stringa.
-- 
~ "L'amore è la risposta.
Ma mentre aspetti la risposta, il sesso fa nascere alcune buone domande."
(Woody Allen)

Grazie, con il tuo aiuto ho più o meno risolto.
.....certo un pò + di cortesia.......
comunque grazie ancora

 comunque grazie ancora
De nada
-- 
~ Always remember you're unique, just like everyone else.