Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    "Focus a tempo" in successione... è possibile?

    Ciao a tutti,

    probabilmente il mio problema è irrisolvibile nel senso che prendo la strada sbagliata in quanto se applicabile andrei contro i criteri di accessibilità, lo espongo comunque

    Faccio una select da DB e completo diversi campi con degli importi (sono nella parte di modifica del mio applicativo, perciò vado a prendere i dati inseriti nel DB).
    A questi applico una funzione JS che mi somma questi importi, questa funziona correttamente durante la fase di inserimento... ovvero quando tolgo il focus dai campi che voglio sommare la funzione agisce mi mostra il totale in un campo apposito.

    Questa funzione però non va bene "a colpo d'occhio" quando faccio la mia parte di SELECT in quanto il campo Totale mi appare vuoto e dovrei andare a posizionare il cursore in tutti (o in buona parte) dei miei 10 campi che voglio sommare. Perciò io vedo come possibile soluzione l'utilizzo di un'altra funzione JS che all'accesso della pagina in questione posizioni il cursore in successione (per una frazione di secondo) in questi campi in modo tale da far apparire il "famoso" campo dove fa il Totale.

    Opinioni o altre soluzioni applicabili a proposito?

    Grazie
    You see beauty I see pain, You see sky and I see acid rain

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Non ho ben capito.

    In linea di massima puoi far partire una funzione con l'evento onload della pagina (oppure onchange della select), e tale funzione puo` a sua volta chiamare varie funzioni (quelle che altrimenti chiami con l'onblur sui vari campi).

    Se fai un esempio, si puo` essere piu` specifici nella risposta.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Ciao Mich_

    allora io accedo alla pagina contentente i campi che raggruppo nell'array di cui voglio fare la somma che faccio tramite questa funzione:

    codice:
    var campi = new Array("ReddAttDipIndip", "ReddAttAcc", "IntReddTitAveri", "ReddSostImm","ReddComEredIndivAltreCompr", "TotaleMoltRedditi", "TotaleMoltRenditeAVSAI"); 
    
    function somma(ff) {
     				var tot = 0;
     				for(var i=0; i<campi.length; i++) {
        									var c = ff.elements[campi[i]].value;
        									if(c=="") c="0";
        									if(c=='NaN') {alert("Not A Number"); c=0;}
        									tot += parseInt(c,10);
      								   }
      				ff.TotaleRedditi.value = tot;
    		   }
    come puoi notare alcuni campi vengono sommati ad altri campi, a loro volta soggetti ad un'altra funzione che li moltiplica per un valore inserito in un apposito menu a tendina (questi campi sono TotaleMoltRedditi e TotaleMoltRenditeAVSAI). Per calcolarli utilizzo le funzioni:

    codice:
    var campi = new Array("PensPrevProfInd", "VitaliziAltreRend", "AlimFigliMin", "AltriRedditi"); 
    
    function molt(ff) {
      				var tot = 0;
      				for(var i=0; i<campi.length; i++) {
        									var c = ff.elements[campi[i]].value;
        									if(c=="") c="0";
       	 								if(c=='NaN') {alert("Not A Number"); c=0;}
        									tot += parseInt(c,10);
      								  }
    
      				ff.TotaleMoltRedditi.value = (ff.PensPrevProfInd.value * ff.MoltPensPrevProfInd.options[ff.MoltPensPrevProfInd.selectedIndex].value) 
    				+ (ff.VitaliziAltreRend.value * ff.MoltVitaliziAltreRend.options[ff.MoltVitaliziAltreRend.selectedIndex].value) + 
    			       	(ff.AlimFigliMin.value * ff.MoltAlimFigliMin.options[ff.MoltAlimFigliMin.selectedIndex].value) 
    				+ (ff.AltriRedditi.value * ff.MoltAltriRedditi.options[ff.MoltAltriRedditi.selectedIndex].value);
    				somma(ff);
    		   }
    e

    codice:
    var campi = new Array("RenditaAVS", "RenditaAI"); 
    
    function molti(ff) {
      				var tot = 0;
      				for(var i=0; i<campi.length; i++) {
        									var c = ff.elements[campi[i]].value;
        									if(c=="") c="0";
       	 								if(c=='NaN') {alert("Not A Number"); c=0;}
        									tot += parseInt(c,10);
      								  }
    
      				ff.TotaleMoltRenditeAVSAI.value = (ff.RenditaAVS.value * 12) 
    				+ (ff.RenditaAI.value * 12);
    				somma(ff);
    		   }
    il problema appunto sorge a causa di questi campi soggetti a moltiplicatore... infatti se nella pagina vi fossero semplicemente campi soggetti alla prima funzione di somma basterebbe cliccare in qualsiasi punto della pagina per far apparire il totale nell'apposito campo.
    In questo caso invece noto che ciò non è sufficiente, devo infatti cliccare su uno o più campi soggetti alla funzione moltiplicatore poi cliccare su un campo non soggetto a questa funzione e poi cliccare su un altro campo soggetto a moltiplicatore... insomma un casino!

    Per questo motivo ho pensato appunto che una soluzione potrebbe FORSE essere quella di provare a dare il focus a tutti questi campi in successione... per un tempo ridottissimo... in modo tale che poi cliccando poi in un qualsiasi punto della pagina (o senza addirittura fare ciò) mi appaia il Totale di tutti questi campi... nell'input text apposito.

    Ma probabilmente quello che dici tu... di richiamare le funzioni con l'onload è la soluzione + adatta!

    Spero di essermi spiegato se non si vede capisco che può essere un po'complicato da capire.
    You see beauty I see pain, You see sky and I see acid rain

  4. #4
    non riesco a capire perchè vuoi utilizzare Javascript

    Se fai una select dei campi dal DB, utilizzi un linguaggio Server-side, ti conviene effettuare direttamente la somma dei campi interessati e inserirla nel campo totale.

    Come valorizzi i singoli campi, così valorizzi il totale.


    Spero di aver capito il problema


  5. #5
    Originariamente inviato da OcchioCrepato
    non riesco a capire perchè vuoi utilizzare Javascript

    Se fai una select dei campi dal DB, utilizzi un linguaggio Server-side, ti conviene effettuare direttamente la somma dei campi interessati e inserirla nel campo totale.

    Come valorizzi i singoli campi, così valorizzi il totale.


    Spero di aver capito il problema

    Ciao OcchioCrepato,

    si utilizzo ASP come linguaggio server-side. Capisco quello che intendi solo che in questo caso il campo TOTALE dovrebbe essere diciamo indicativo e da vedere a "colpo d'occhio", mi spiego meglio. Nella fase di modifica dove faccio la SELECT dei campi da sommare... se faccio una modifica di questi campi vorrei appunto che il campo TOTALE si aggiorni automaticamente all'onblur... per questo utilizzo JS e non ASP... dove appunto potrei fare la SELECT del campo totale inserito... ma non aggiornarlo dinamicamente e vedere il TOTALE "a colpo d'occhio".

    You see beauty I see pain, You see sky and I see acid rain

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Ha ragione Occhio.
    Per il primo riempimento dei campi, conviene farlo tramite ASP. Poi quando li modifichi devi usare JS per poterli visualizzare subito.

    Comunque manca ancora il codice di come vengono chiamate le varie funzioni (potrebbe essere un evento applicato ai campi).
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  7. #7
    Originariamente inviato da Mich_
    Ha ragione Occhio.
    Per il primo riempimento dei campi, conviene farlo tramite ASP. Poi quando li modifichi devi usare JS per poterli visualizzare subito.

    Comunque manca ancora il codice di come vengono chiamate le varie funzioni (potrebbe essere un evento applicato ai campi).
    Le funzioni vengono richiamate dai campi così:

    -> onblur="somma(this.form)" --> per tutti i campi da sommare

    -> onblur="molt(this.form)" --> per tutti i campi soggetti al primo tipo di moltiplicatore fisso

    -> onblur="molti(this.form)" --> per i campi soggetti al secondo tipo di moltiplicatore variabile (quello con lista a tendina)


    Queste funzionano tutte correttamente.

    Per richiamarle direttamente dall'onload come devo fare?
    You see beauty I see pain, You see sky and I see acid rain

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Devi chiamarle una volta sola?

    <body onload="somma(document.getElementById('ID_FORM')); molt(document.getElementById('ID_FORM')); molti(document.getElementById('ID_FORM'));"

    dove ID_FORM viene definito da:
    <form id="ID_FORM' ...>


    Se invece devono essere richimate piu` di una volta (penso alla moltiplicazione, ad esempio), la sintassi e` diversa.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  9. #9
    È proprio quello che volevo

    Grazie Mich_ !

    You see beauty I see pain, You see sky and I see acid rain

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.