Pagina 2 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 39
  1. #11
    Un'altra domanda, scusa ma non capisco JS a fondo... e neanche di base,

    ma devo inserire la funzione controllaNumeri(cc) tale e quale come l'hai scritta tu... oppure devo adattarla ad ogni singolo campo che ho (come ho fatto con la mia di prima)... e poi richiamarla?

  2. #12
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Da come scrivi mi pareva che fossi un po' piu` forte sul JS.

    Come vedi io passo alla funzione l'oggetto campo (chiamato cc), cui faccio riferimento per gli usi nella funzione.
    Quindi la funzione e` uguale per tutti i campi da controllare, basta che passi il campo giusto, cosa che si fa con il this nella chiamata.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #13
    x me JS


    comunque... io sono arrivato fin qui (non fare caso alla dropdownlist con i moltiplicatori... quello è un altro problema )

    codice:
    <html>
    
    	<head>
    
    <script language="javascript" type="text/javascript">
    
    function controllaNumeri(cc) {
      var vv = cc.value;
      if(!vv.match(/^[\d\.]*$/) {
        alert("Il campo "+cc.name+" deve contenere solo numeri");
        cc.value = vv.substr(0,vv.length-2);
        cc.focus(); 
        return false;
      }
      return true;
    }
    
    
    function somma(ff) {
     
      var A = parseInt(ff.campo1.value,10);
      var B = parseInt(ff.campo2.value,10);
      var C = parseInt(ff.campo3.value,10);
    
      ff.totale.value = A + B + C;
    
    	
    }
    
    
    </script>
    
    
    	<head>
    
    			<body>	
    
    			<form name="modulo">	
    
    			<table align="center">
    
    			<tr>	
    
    			<td>Campo 1</td>
    			<td><input name="campo1" type="text" size="10" onkeyup="controllaNumeri(this);" onblur="somma(this.form)" />  </td>
    			
    			<td><select name="Moltcampo1" size="1" maxLength="50">
      			
               		<option>1</option>
               		<option>2</option>
               		<option>3</option>
               		<option>4</option>
               		<option>6</option>
               		<option selected>12</option>
    			</select>			
    
    			
    			</tr>
    
    			<tr>
    			<td>Campo 2</td>
    			<td><input name="campo2" type="text" size="10"onkeyup="controllaNumeri(this);" onblur="somma(this.form)" />  </td>
    			
    			<td><select name="MoltCampo2" size="1" maxLength="50">
      			
               		<option selected>1</option>
               		<option>2</option>
               		<option>3</option>
               		<option>4</option>
               		<option>6</option>
               		<option>12</option>
    			</select>
    
    
    			
    			</tr>
    		
    			<tr>
    			<td>Campo 3</td>
    			<td><input name="campo3" type="text" size="10" onkeyup="controllaNumeri(this);" onblur="somma(this.form)" /> </td>
    			
    			<td><select name="MoltCampo3" size="1" maxLength="50">
      			
               		<option selected>1</option>
               		<option>2</option>
               		<option>3</option>
               		<option>4</option>
               		<option>6</option>
               		<option>12</option>
    			</select>
    
    			</tr>
    
    			<tr>
    			<td>TOTALE</td>
    			<td><input name="totale" type="text" size="10" readonly="readonly" /></td>
    			</tr>
    
    			</table>
    
    			</body>
    
    			</form>
    
    </html>
    dove sbaglio adesso?

  4. #14
    Facendo delle prove ho notato che non mi aggiorna il totale automaticamente... ma solo quando ho completato tutti i campi in questione.

    Nel senso che, se metto un importo nel campo 1, poi nel campo 2, poi nel campo 3, e poi clicco sul campo del totale... questo viene aggiornato! Ciò che non avviene all'inserimento di ogni singolo importo come vorrei...

    una soluzione sarebbe quella di settare un value di default a 0 ... non si può fare altrimenti?


  5. #15
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Ho riguardato le specifiche di parseInt(), ed in effetti se il campo e` vuoto non trasforma in 0 ma in NaN.

    Conviene quindi modificare la funzione cosi`:
    codice:
    function somma(ff) {
     
      var c1 = ff.campo1.value;
      var c2 = ff.campo2.value;
      var c3 = ff.campo3.value;
      
      if(c1=="") c1="0";
      if(c2=="") c2="0";
      if(c3=="") c3="0";
    
      var c1 = parseInt(c1,10);
      var c2 = parseInt(c2,10);
      var c3 = parseInt(c3,10);
    
      ff.totale.value = c1 + c2 + c3;
    	
    }
    Nota che i nomi che ho messo seguono una certa logica, e sono pronti per una trasformazione della funzione tramite un loop.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  6. #16
    Va benissimo! Grazie Mich_

  7. #17
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Quando sei pronto a trasformare la funzione con un bel loop?
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  8. #18
    Sinceramente non saprei da dove partire... :master:

  9. #19
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    La funzione diventa anche piu` semplice:
    codice:
      var campi = new Array("campo1", "campo2", "campo3"); 
    
    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";
        tot += parseInt(c,10);
      }
      ff.totale.value = tot;
    }
    Con questa devi specificare i nomi di tutti i campi da sommare in un vettore fuori dalla funzione.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  10. #20
    Interessante ti ringrazio!

    Un'altra domanda... se io volessi aggiungere una serie di sottocampi numerati (con un ciclo) con l'aiuto di PHP, dopo tramite questa funzione JS (modificata ulteriormente) potrei calcolare ancora la somma come faccio ora?

    Ad esempio, io avrei qualcosa del genere:

    codice:
    <html>
    
    	<head>
    
    	</head>
    
    
    		<body>
    
    		<form name="modulo">
    
    			<table align="center">
    
    			<tr>
    			<td>Campo 1</td>
    			<td><input name="Campo1" maxLength="10" size="10" onKeyUp="return controllaNumeri();" onblur="somma(this.form)" /> </td>
    			
    			<td><input name="Commento 1)" type="button" value="*" onClick="show_hide(this);"> </td>
    			<td><input name="Aggiungi" type="button" value="Aggiungi"><input type="button" value="Rimuovi"></td>
    			</tr>	
    
    			<tr>
    			<td>Campo 2</td>
    			<td><input name="Campo2" maxLength="10" size="10" onKeyUp="return controllaNumeri();" onblur="somma(this.form)" /> </td>
    			
    			<td><input name="Commento 1)" type="button" value="*" onClick="show_hide(this);"> </td>
    			<td><input name="Aggiungi" type="button" value="Aggiungi"><input type="button" value="Rimuovi"></td>
    			</tr>
    
    
    			<tr></tr>
    			<tr></tr>
    			<tr>
    			<td>TOTALE</td>
    			<td><input name="totale" type="text" maxLength="12" size="10" style="background:#FFFF00 ;" readonly></td>
    			</tr>
    			<tr></tr>
    
    			</table>
    
    		</body>
    
    		</form>
    
    </html>
    tramite il bottone Aggiungi inserisco i sottocampi (numerati) e Rimuovi (ovviamente li rimuovo se caso).

    È possibile?

    ps. non far caso ai bottoni di commenti e alle altre funzioni presenti in questa parte di codice

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 © 2025 vBulletin Solutions, Inc. All rights reserved.