Newsgroup: it.comp.lang.javascript
Titolo: controllo numerico su imput

Vorrei controllare se su un campo è stato digitato un numero e nel
caso contrario cancellare il valore inserito e ritornare con il focus
sul campo.
Guardando sul N.G. ho trovato questo esempio da inserire su onchange:
onChange="if(isNaN(this.value)){ alert('Errore!\nIl campo deve
contenere un
valore numerico.'); this.focus(); }"
L'alert parte ma il focus non ritorna sul campo ed inoltre il valore
non viene eliminato.
Mi date una mano. Va bene anche una function.
Grazie
Marco

 Marco
il valore non viene eliminato perchè non fai nulla per eliminarlo
document.getElementById('campo_interessato').value='' elimina il valore
per il focus mi sembrerebbe corretta. in alternativa usa sempre
document.getElementById('campo_interessato').focus
ciao
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 document.getElementById('campo_interessato').focus
Ho provato a riscrivere il codice in questo modo ma il focus in caso di
input non numerico non ritorna sulla casella di input ma va alla
successiva. Sono alle prime armi. Mi potete correggere il codice?
grazie
Marco
<script language="JavaScript">
function numero(num, id)
{
var tipo
tipo = document.getElementById (id)
if(isNaN(num)){
alert('Errore!\nIl campo deve contenere un valore numerico.');
tipo.focus();
return ('')
}
else
{
return (num)
}
}
</script>
 <input id="mese" type= "TEXT" name="mese" size="5"
onChange="javascript:this.value=numero(this.value, 
this.id
);" value="">

 non viene eliminato.
Il focus torna sul campo, ma poi viene spostato al campo successivo. Questo
perché hai usato l'event handler onchange, mentre dovresti usare l'onblur.
Attento: se più di un campo ha un controllo di questo tipo, rischi di
mandare in crisi il sistema facendo "ping pong" tra campi.
E' pericoloso usare l'event-handler onblur con reimpostazione di focus e un
alert di mezzo.
Il valore non viene eliminato perché non lo elimini tu. Nel codice non c'è
traccia di azzeramenti del genere.
Eccoti comunque un codice di esempio. Fai attenzione a quanto ti ho detto
sul rimbalzo del focus.
<script type="text/javascript">
	function validateNumber( sender ){
		if ( isNaN(sender.value) ){
			alert("Attenzione!\r\nIl campo deve contenere un valore numerico.");
			sender.focus();
			sender.select();
		}
	}
</script>
<input type="text" onblur="validateNumber(this)" />
<input type="text" value="" />
Nota: con il codice sender.select(); selezioni l'intero testo
precedentemente inserito, in questo modo appena l'utente può sovrascriverlo
facilmente, tuttavia senza cancellarlo subito. Questo tipo di comportamento
è spesso preferibile all'eliminazione automatica del dato perché potrebbe
aver sbagliato ad inserire solo un dettaglio (es un carattere).
Se in ogni caso preferisci che il testo venga cancellato, basta che tu
sostituisca quella riga con la seguente:
	sender.value="";
-- 
~ "FINARMENTE LI SFRATTATI AVRANNO UN TETTO SULLA TESTA!
...però tirato ammodino, un tegolo pe' vorta.." (Il vernacoliere)

Grazie Zero per il codice perfettamente funzionante e per la chiarezza
delle tue spiegazioni. Ho più controlli di questo tipo nella pagina e
tutte le prove fatte non ha dato errori. Speriamo bene.
Ciao
Marco