Newsgroup: it.comp.lang.javascript
Titolo: aiuto

Mi rendo conto che le mie conoscenze di javascript sono quasi inesistenti,
ma al lavoro mi hanno "regalato" questa bella patata bollente.
Siamo in consegna e DEVO assolutamente riuscire a presentare un soluzione al
problema.
Il problema è questo: all'interno della input text devono poter essere
scritti solo numeri (l'inserimento di altri caratteri non deve provocare
alcun cambiamento) e in più devono essere automaticamente i punti separatori
durante l'inserimento dell'importo.
<html>
<head>
<title>PROVA</title>
</head>
<body BGCOLOR="#FDF5E6">
<form name='mio' method='GET' action=''>
 <br>
 <center>
 <H3>PROVA DELLA FUNZIONE NUMERICO SU UN CAMPO DI TESTO</H3>
 <!-- <input type=text name="user"
onKeyPress="if(navigator.appName=='Microsoft Internet
Explorer'){numerico(window.event)}else {numerico(event)}"
onKeyUp="if(navigator.appName=='Microsoft Internet
Explorer'){importo(window.event, user)}else {importo(event, user)}" size=15
value=''> -->
 <p>Test:
      <!-- <input type=text name="user" onKeyDown="numerico(event, user)"
onKeyUp="importo(event, user)" size=15 value=''> -->
   <input type=text name="user" onKeyUp="importo(event, user)" size=15
value=''>
    </p>
    <p>
      <input type=reset value="annulla">
      <script language="JavaScript">
   //Inserimento dei separatori decimali negli importi
  function importo(e, campoImp) {
   var keycode;
   var realkey;
   if (navigator.appName=="Microsoft Internet Explorer") {
    //alert("Sono MSIE");
    keycode = e.keyCode;
    realkey = String.fromCharCode(keycode);
   } else {
    //alert("Sono NS");
    keycode=e.which;
    realkey = String.fromCharCode(keycode);
   } //end if
   var campo;
   campo = FormatNumber(NumberEvaluate(campoImp.value,".","."),".",".");
   campoImp.value=campo;
  } //end function
  function FormatNumber(n,sepdec,sepgrp) {
   var posp,str,strtmp;
   if (!isNaN(n)&&(n!="")){
   //if (isNumeric(n)&&(n!="")){
    posp=n.indexOf(sepdec);
    if (posp==-1) posp=n.length;
    str=n.substr(posp);
    n=n.substr(0,posp);
    if (n=="") n="0";
    do {
     strtmp=n.substr(n.length-3);
     n=n.substr(0,n.length-strtmp.length);
     if ((strtmp.length==3)&&(n!=""))
      str=sepgrp+strtmp+str;
     else str=strtmp+str;
    } while(n!="");
    return str;
   } else {
    var p = n.substr(1);
    //n = ""; //modifica aggiunta
    //return n;
    return p;
   }
  } //end function
  function NumberEvaluate(n,sepdec,sepgrp) {
   var s="",i,u=n.charAt(n.length-1);
   for(i=0;i<n.length;i++)
    if (n.charAt(i)!=sepgrp) s+=n.charAt(i);
   while (s.charAt(0)=="0") s=s.substr(1);
   if (s!="") s=s+(u=="."?sepdec:"");
   return s;
  } //end function
  function isNumeric(n){
   var v = n.replace('.','.');
   if (!isFinite(v)) return false;
   else return true;
  } //end function
  // Controllo di numericità
   function numerico(e, obj) {
   var value = obj.value;
   var keycode;
   var realkey;
   if (navigator.appName=="Microsoft Internet Explorer") {
    //alert("Sono MSIE");
    keycode = e.keyCode;
    realkey = String.fromCharCode(keycode);
    if (!parseInt(realkey)) {
     alert(keycode);
     alert(realkey);
     e.keyCode=0;
     alert("Immesso valore non valido");
    }
   } else {
    //alert("Sono NS");
    keycode=e.which;
    realkey = String.fromCharCode(keycode);
    if (!parseInt(realkey)) {
     e.which=0;
     alert("Immesso valore non valido");
     //obj.value = value.substr(1, value.length-1);
    }
   } //end if
  } //end function
 </script>
    </p>
  </center>
</form>
</body>
</html>
Ringrazio anticipatamente tutti coloro che vorranno rispondermi sia sul ng
sia in e-mail
ANNA
ar.cri...@iol.it
--

 hai una
quantita' enorme di materiale da osservare, studiare ed eventualmente
integrare al codice che ti fornisco.
Copia e incolla in una pagina vuota:    
<html>
<title></title>
<head>
<script language="javascript">
function SoloNum() {
var hdn=document.foo.hd1.value;
if (document.foo.s_n.value=="") {
hdn=" ";
}
else if(! document.foo.s_n.value.toString().match(/^[0-9]+$/) )
{
document.foo.s_n.value=hdn;
}
else {
document.foo.hd1.value=document.foo.s_n.value;
} }            
</script>
</head>
<body>
<form name="foo">
<input type="text" name="s_n" value="" onKeyUp="SoloNum();">
<input type="hidden" name="hd1" value="">
</form>
</body>
</html>
-- 
mailto: y = i
----------------------------------------
Vivo nel terrore di non essere frainteso 
(Oscar Wilde)

 durante l'inserimento dell'importo.
Purtroppo non puoi impedire che il cursore se ne vada all'inizio del 
campo TEXT quando gli ridai il focus (questa è una cosa che rispondiamo 
almeno una volta a settimana nel NG), l'unica idea che mi viene in mente 
è che tu prendi l'ultimo carattere digitato (che è quello più a 
sinistra) e lo piazzi a destra quando scrivi il VALUE.
Per una domanda riguardante un sito commerciale, è il massimo che mi 
sento di rispondere... tu mi capirai :-)
-- 
Ciao, Riccardo
------------------------------------------------------------------------
WebMaster: ----> 
http://www.jsdir.com
 <---- (aka 
http://www.jspoint.it
)
              All the JavaScript you need
------------------------------------------------------------------------
               Nessun traguardo è abbastanza lontano.
------------------------------------------------------------------------


Ti assicuro che non si tratta affatto di un sito commerciale.
Posso dirti che si tratta di un'interfaccia ad programma creato
appositamente per una "istituzione pubblica" (capirai che non posso dire di
piů).
Spero che tu mi creda sulla fiducia  :-)
Grazie dell'aiuto
ANNA