Uso proprio onchange ma questo viene assegnato direttamente nello script; vedi il blocco di codice sotto Inizializzazione.non capisco come fai a far aggiornare il tutto ogni volta che viene modificato il valore senza usare onChange
Nel ciclo while assegno l'evento onchange ad ogni elemento di campiInput (che è un nodeList dei campi con classe "campoInput").
Quella funzione viene richiamata esattamente al verificarsi dell'evento onchange (impostato sempre su Inizializzazione). Oltre a controllare il valore del campo, fa una serie di "aggiustamenti" per correggere automaticamente eventuali valori non consentiti. In sostanza correggere l'inserimento di eventuali caratteri non numerici e limita il valore tra 0 e gli attuali punti rimanenti. Se non ti è chiaro il funzionamento di qualche parte in particolare, dentro questa funzione, fammi sapere.e non ho capito bene come dovrebbe funzionare la funzione controllaValoreCampo
Mi permetto di rispondere al posto di Andrea (eventualmente chiarirà meglio lui se lo ritiene opportuno).Andrea: anche te come fai a far aggiornare il tutto senza onChange?
Giusto per precisare, tieni presente che in questo caso Andrea ha utilizzato jQuery mentre il mio esempio è semplice javascript.
Sostanzialmente ad ogni campo sono stati impostati due eventi attraverso il metodo "on":
- keyup: si verifica quando viene rilasciato un qualsiasi tasto della tastiera. Questo fa in modo di lanciare una funzione direttamente durante la digitazione sul campo, a differenza di onchange che invece si verifica solo dopo la perdita del focus del campo in questione.
Diciamo che con keyup si può avere un controllo in tempo reale. Personalmente ho scelto di utilizzare onchange nel mio esempio perché, oltre il controllo del superamento dei punti, avvengono delle ulteriori correzioni che ho preferito che siano eseguite dopo l'inserimento completo del valore.
- blur: si verifica quando l'elemento, sul quale è applicato, perde il focus. In questo caso è stato utilizzato per controllare che i campi non contengano valori vuoti.
Certo che sì. Andrea confermerà.Posso sostituire i campi text con campi number?
Basterà modificare, nelle varie parti dove è utilizzato, il selettore jQuery in una cosa del genere $("input:number") anziché "input:text". Ovviamente andrà sistemata opportunamente anche la parte html e css.
E' chiaro che in questo caso sia più confacente un campo di tipo number per il tipo di utilizzo che ne stai facendo, ma tieni presente che su diversi browser la differenza è praticamente nulla. Al momento giusto qualcuno (tra quelli che ho provato personalmente), ad es. chrome, aggiunge uno stepper sui campi number, ma per il resto vengono considerati alla stregua dei campi di tipo text (che io sappia). Ad esempio in un campo number sarà possibile inserire comunque qualsiasi carattere anche se non numerico. Per questo motivo sarebbe opportuno, via script, fare dei controlli o prevenire in qualche modo l'inserimento di valori non consentiti.
Sarebbe anche possibile integrare un qualche apposito plugin (ce ne sono vari in jQuery) per ottenere un numeric-stepper crossbrowser così da rendere più funzionale il tutto. Ovviamente prendila giusto come un'idea;
EDIT: tampertools mi ha anticipato sul primo punto![]()