Allora non hai neppure errori: il primo alert viene chiamato subito, appena entra nel loop per fare la somma.
Allora non hai neppure errori: il primo alert viene chiamato subito, appena entra nel loop per fare la somma.
Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
No domande tecniche in messaggi privati
Non mi restituisce nessuno degli alert immessi nella funzione somma.
Io clicco su Aggiungi e mi aggiunge effettivamente tutti i campi che voglio (e li posso rimuovere tranquillamente) senza errori.
Immetto un importo nei sottocampi aggiunti e fin lì niente errori (ma niente somma).
Se scrivo nel campo 1 o campo 2 vecchio allora JS "va in tilt" e mi da il classico:
"Errore nella visualizzazione della pagina"
Modifica la funzione ancora, ma se ancora non ti da` l'alert significa che ci sono altri problemi, non legati direttamente a questa funzione.codice:function somma(ff) { alert("entrato nella funzione"); var tot = 0; alert("ci sono "+campi.length+" campi da sommare"); for(var i=0; i<campi.length; i++) { ... ecc
Prima di provare a modificare i campi aggiunti, prova ad inserire dei dati nei campi vecchi (senza aggiungere campi); poi prova ad aggiungere un campo e modificare i campi vecchi (ancora senza inserire dati nei nuovi).
NOTA: io per campi vecchi intendo quelli inseriti dall'HTML, per nuovi quelli inseriti dal JS.
Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
No domande tecniche in messaggi privati
Ok si intendo anche io cosìNOTA: io per campi vecchi intendo quelli inseriti dall'HTML, per nuovi quelli inseriti dal JS.![]()
D'accordo, in serata o al più tardi domattina provo! Grazie ancora!Modifica la funzione ancora, ma se ancora non ti da` l'alert significa che ci sono altri problemi, non legati direttamente a questa funzione.
![]()
Allora... ho aggiornato la funzione così come mi hai detto:
se metto un numero nel campo vecchio e tolgo il cursore, mi mostra gli alert:codice:var campi = new Array("campo1", "campo2" ); function somma(ff) { alert("entrato nella funzione"); var tot = 0; alert("ci sono "+campi.length+" campi da sommare"); for(var i=0; i<campi.length; i++) { alert("sto per aggiungere il campo "+ff.elements[campi[i]].name); var c = ff.elements[campi[i]].value; alert("il suo value e` "+c); if(c=="") c="0"; if(c=='NaN') {alert("Not A Number"); c=0;} tot += parseInt(c,10); } ff.totale.value = tot; }
- "entrato nella funzione" e "ci sono 2 campi da sommare"
poi aggiungo un campo nuovo (e non ci inserisco niente), modifico il campo vecchio e mi mostra gli alert:
- "entrato nella funzione" e "ci sono 3 campi da sommare"
E non da` errore? E gli alert all'interno del loop (sto per aggiungere ... / il suo value e` ...) li vedi?
Allora quando ti da` l'errore?
Prova a fare un po' di prove in varie combinazioni (modifica campi vecchi, modifica campi nuovi, ...) in ordine diverso.
Essendo un errore legato agli oggetti su cui lavora il programma, occorre capire su quale oggetto trova l'errore.
Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
No domande tecniche in messaggi privati
Riepilogando:
metto un valore nel campo vecchio e il browser mi da subito l'errore con il punto esclamativo ...
tolgo il cursore e mi mostra gli alert
- "entrato nella funzione" e "ci sono 2 campi da sommare"
poi clicco sul bottone Aggiungi e mi da i seguenti alert:
-> prima: campo1,campo2
-> dopo: campo1,campo2,testo1
Comunque gli alert
sto per aggiungere ... / il suo value e` ...)
non me li mostra!
Non e` che la pagina sia in rete per caso? o che la puoi mettere in un posto provvisorio?
Non riesco a capire ...
I casi sono tre: o c'e` un errore da qualche parte che non ho visto (magari in una parte della pagina che non abbiamno considerato), oppure io non capisco piu` niente, o ancora non me la racconti giusta.
Io opto per la prima ipotesi, dato che tendo a scartare le altre due.
Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
No domande tecniche in messaggi privati
Quello che ho finora è questo:
non ho ancora un posto dove metterla in rete...codice:<html> <head> <script language="javascript" type="text/javascript"> var campi = new Array("campo1", "campo2" ); function somma(ff) { alert("entrato nella funzione"); var tot = 0; alert("ci sono "+campi.length+" campi da sommare"); for(var i=0; i<campi.length; i++) { alert("sto per aggiungere il campo "+ff.elements[campi[i]].name); var c = ff.elements[campi[i]].value; alert("il suo value e` "+c); if(c=="") c="0"; if(c=='NaN') {alert("Not A Number"); c=0;} tot += parseInt(c,10); } ff.totale.value = tot; } var num=1; function accoda(){ if(document.createElement && document.getElementById && document.getElementsByTagName) { // crea elementi var oTr=document.createElement("TR"); var oTd1=document.createElement("TD"); var oTd2=document.createElement("TD"); var oTd3=document.createElement("TD"); var oTd4=document.createElement("TD"); var oField=document.createElement("INPUT"); var oText=document.createTextNode(""+num); // setta attributi oField.setAttribute("type","text"); oField.setAttribute("name","testo"+num); oField.setAttribute("size","10"); // appendi al relativo padre oTd1.appendChild(oField); oTd2.appendChild(oText); oTr.appendChild(oTd1); oTr.appendChild(oTd2); document.getElementById('tabella').getElementsByTagName('TBODY')[0].appendChild(oTr); // incrementa variabile globale alert("prima: "+campi); campi.push("testo"+num); alert("dopo "+campi); num++ } } function rimuovi(){ if(document.removeChild && document.getElementById && document.getElementsByTagName) { // se non e' la prima riga if(num>1){ // riferimento al tbody var tb=document.getElementById('tabella').getElementsByTagName('TBODY')[0]; // riferimento all' ultimo TR var lastTr=tb.getElementsByTagName('TR')[(tb.getElementsByTagName('TR').length)-1] var fieldn = lastTr.getElementsByTagName('input')[0].name; for(var i=0; i<campi.length; i++) { if(campi[i] == fieldn) campi.splice(i,1); } // rimuovi tb.removeChild(lastTr); // decrementa variabile globale num-- } } } </script> </head> <body> <form name="modulo"> <table align="center"> <tr> <td>Campo 1</td> <td><input name="Campo1" maxLength="10" size="10" 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" onclick="accoda()"><input type="button" value="Rimuovi" onclick="rimuovi()"></td> </tr> </table> <form name="modulo"> <table align="center" id="tabella"> <tbody> <tr> <td></td> </tr> </tbody> </table> </form> <table align="center"> <tr> <td>Campo 2</td> <td><input name="Campo2" maxLength="10" size="10" onblur="somma(this.form)" /> </td> <td><input name="Commento 2)" type="button" value="*" onClick="show_hide(this);"> </td> <td><input name="Aggiungi" type="button" value="Aggiungi" onclick="accoda()"><input type="button" value="Rimuovi" onclick="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>