Visualizzazione risultati 1 fino 10 di 10

Discussione: [javascript] Strano errore su controllo carattere in input box

  1. #1
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,771

    Predefinito [javascript] Strano errore su controllo carattere in input box

    Salve.

    Sto provando ha fare, con Javascript, una funzione che permette all'utente di inserire solo caratteri numerici in un campo, ho provato scrivendo questo codice:
    Codice HTML:
    <script type="text/javascript">
       function isInt(element)
       {
          if(!parseInt(element.value)) {
               alert("No int");
          }
       }
    </script>
    
    <input type="text" onkeydown="isInt(this);" />
    Ma l'effetto non è come lo vorrei, cioè, la if mi si esegui quando il carattere scritto è intero.

    Ho provato anche a scrivere in questo modo ma l'if non mi si esegue mai:
    Codice HTML:
    <script type="text/javascript">
       function isInt(element)
       {
          if(!parseInt(element.value)) {
               alert("No int");
          }
       }
    </script>
    
    <input type="text" onkeydown="isInt(this);" />
    Qual'è il problema? sono io che sbaglio ad utilizzare la funzione?

    Sevenjeak
    Software developer and much more

  2. #2
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Sì, la funzione parseInt converte tutti i caratteri che rappresentano cifre in numero, se poi dopo le cifre aggiungi altri simboli, la funzione gli ignora semplicemente. Per fare questo controllo ti conviene usare le espressioni regolari. La specifica che descrive le regole del javascript la trovi qui, la descrizione di parseInt è nella sezione 15.1.2.2.

  3. #3
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,771

    Predefinito

    In poche parole dovrei utilizzare la funzione parseInt(), ma no in questo modo? o dovrei semplicemente utilizzare gli espressioni regolari?

    Ho letto la guida postata da te, ma purtroppo capisco poco la lingua inglese, potresti farmi un piccolo esempio?

    P.S.: Nel secondo codice che ho postato ho sbagliato ha scrivere la condizione, visto che è lo negata al posto di affermarla.
    Ultima modifica di sevenjeak : 03-09-2010 alle ore 09.11.22

    Sevenjeak
    Software developer and much more

  4. #4
    slavettosoft non è connesso Neofita
    Data registrazione
    09-08-2010
    Messaggi
    26

  5. #5
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,771

    Predefinito

    Il link non si vede.

    Sevenjeak
    Software developer and much more

  6. #6
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Puoi fare così:
    Codice:
    function isInt(string){
        return /*scegli una regexp*/.test(string);
    }
    /*
    /^\d+$/    (la stringa è composta da una o più cifre)
    /^\d*$/    (la stringa è composta da zero o più cifre)
    /^[+-]?\d+$/    (la stringa è composta da una o più cifre, preceduta o meno dal segno (+ o -))
    */
    Se non c'è quello che ti serve, descrivi quando la funzione deve restituire true e quando deve restituire false.

  7. #7
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,771

    Predefinito

    Ho modifica la mia funzione in questo modo:

    Codice HTML:
    function isInt(element)
    {
        var myre = /^\d*$/;
    	
    	return myre.test(element.value);
    }
    Dall'espressione data dovrebbe restituire true se il campo è vuoto è se contiene qualunque cifra, vero?

    Cmq, provando ha stampare il risultato in questo modo:
    Codice HTML:
    alert(isInt(this)
    Ovviamente specificata nell'attributo onkeydown dell'input box, ma se nell'input box inserisco sia numeri che lettere mi restituisce sempre true, Dovrei usare un'altra espressione regolare o sbaglio qualche altra cosa?

    P.S.: Scusa, ma gli espressione regolari proprio non le capisco
    Ultima modifica di sevenjeak : 06-09-2010 alle ore 10.27.48

    Sevenjeak
    Software developer and much more

  8. #8
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Tutto quello che hai scritto è corretto, forse hai sbagliato qualcos'altro, puoi postare il codice o l'indirizzo della pagina?

  9. #9
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,771

    Predefinito

    La pagina la sto provando in locale, cmq l'intero codice e questo:
    Codice HTML:
    function isInt(element)
    {
        var myre = /^\d*$/;
    	
    	return myre.test(element.value);
    }
    
    <input type="text" onkeydown="alert(isInt(this));" />

    Sevenjeak
    Software developer and much more

  10. #10
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Se tu esegui la funzione all' attivazione dell'evento onkeydown, il tasto che stai premendo non ha ancora modificato la proprietà value, devi usare al suo posto onkeyup.
    Ultima modifica di karl94 : 06-09-2010 alle ore 10.47.38

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •