Visualizzazione dei risultati da 1 a 6 su 6

Discussione: jquery keypress

  1. #1
    Utente di HTML.it L'avatar di pishta
    Registrato dal
    May 2006
    Messaggi
    138

    jquery keypress

    Salve a tutti, ho un <input type=text> in cui l'utente digita delle cifre (dovrei controllare con jquery che siano solo cifre....è possibile?)

    vorrei che in un'altro campo "ris" apparisse il risultato della somma tra il compo di input e un valore che imposto io, in pratica:

    $('input:text').val() + mio_val

    ogni volta che l'utente digita una cifra quindi si aggiorna quel campo "ris"

    stavo dando un'occhiata alla funzione di jquery keypress(fn) ma non ho capito molto bene
    come usarla per ottenere quanto sopra scritto.


    ci sono suggerimenti su come fare? grazie mille

  2. #2
    Ti conviene usare l'evento onkeyup.
    Esistono 3 tipologie di eventi per l'input da tastiera:
    1. onKeyDown: evento che viene lanciato quando premi sulla tastiera (attento, nel momento in cui il tasto viene premuto) in quel preciso istante l'input o il textarea su cui viene lanciato l'evento non è ancora aggiornato, ha ancora il valore che aveva prima dell'evento, nell'oggetto evento corrispondente, sotto la voce keyCode, viene salvato il codice ascii corrispondente al tasto premuto.
    2. onKeyUp: evento che viene lanciato quando rilasci il tasto premuto, in questo momento l'input è aggiornato con il valore premuto da tastiera; l'oggetto evento ha comunque in keyCode il codice ascii corrispondente al tasto premuto.
    3. onKeyPress: è un evento un po' diverso, dato che non rappresenta l'effettiva pressione di un tasto, quando l'invio di un carattere da tastiera. Tuttavia, nella specifiche del DOM3 è stato deprecato, quindi non ti conviene usarlo.

    Di questi 3 eventi (*), io ti consiglio di usare un'accoppiata dei primi due: al keydown controlli il keyCode dell'evento e verifichi che sia un carattere accettabile (puoi usare questa funzione), se non è tra 0-9 allora non è un numero basta che fai il test di una RegExp tipo
    codice:
    /[0-9]/.test(char)
    se il risultato è false blocchi l'evento e la sua propagazione (così che non metta il carattere proibito). Lo fai tranquillamente con questa funzione.

    Sull'evento keyup, puoi essere ragionevolmente certo di avere i solo numeri nell'input. A questo punto prendi il valore dell'input e lo passi ad un parseInt() per ottenere un numero. In jQuery puoi aggiornare il contenuto di un elemento con $('#ris').text(str) dove str è il testo da aggiornare.

    N.B. ovviamente non ho parlato di come applicare l'evento dato che lo trovi qui

    (*) ci sarebbe anche un 4 evento chiamato onTextInput, cioè quando del testo viene immesso da tastiera, che nel DOM3 viene implementato al posto del onkeypress. Il problema di usare keypress o textinput sta nel fatto che ci sono molte versioni di browser che NON supportano textinput, ma supportano keypress, tuttavia, dato che nella nuova versione del DOM js, onkeypress non verrà supportato si è scoraggiati al suo uso. L'unica cosa che potresti fare è implementare un controllo per vedere se l'evento è supportato ed usare uno o l'altro a seconda dei casi, ma secondo me fai prima ad usare gli altri due eventi.
    I DON'T Double Click!

  3. #3
    Utente di HTML.it L'avatar di pishta
    Registrato dal
    May 2006
    Messaggi
    138
    ok userò la combinazione onKeyDown-onkeyup da te consigliata visto che mi permette di controllare in maniera granulare tutto il percorso di input e avere dati direttamente puliti all'onkeyup. Ci provo e ti faccio sapere! nel frattempo ti ringrazio molto, sei stato completissimo come pochi nel rispondere!! grazie mille!!

  4. #4
    Utente di HTML.it L'avatar di pishta
    Registrato dal
    May 2006
    Messaggi
    138
    ok sono riuscito nell'intento!

    Una cosa però non mi è chiara:



    nel keydown io controllo che l'input inserito non sia un carattere. In caso lo fosse non basterebbe semplicemente ritornare falso? perché fare


    codice:
    e.cancelBubble = true;  
    e.stopPropagation();
    per bloccare la propagazione dell'evento?

  5. #5
    sono i due sistemi per bloccare l'evento sul nascere in IE (e.cancelBubble = true; ) e sugli altri browser (e.stopPropagation(); ), non basta ritornare false, perché alcuni browser non lo interpretano sempre (per tutti gli eventi dico) come blocco dell'evento. Quello è il metodo per bloccare un evento.
    I DON'T Double Click!

  6. #6
    Utente di HTML.it L'avatar di pishta
    Registrato dal
    May 2006
    Messaggi
    138
    ok, ogni dubbio è fugato. Ti ringrazio ancora!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.