Kleines Problem beim Rechnen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Kleines Problem beim Rechnen

    Hallo Leute,

    beim meinem Formular können Zeilen hinzugefügt werden und die Summen im ersten Textfeld sollen addiert werden. Klappt auch soweit.

    Zuerst einmal würde ich mich über Verbesserungsvorschläge der Funktion calc() und der enthaltenen RegEx sehr freuen, da ich in JS ein blutiger Anfänger bin?

    Außerdem klappt es beim Entfernen der Zeile nicht, das neu kalkuliert wird?


    Apollon

    HTML-Code:
    <html>
    <head>
    <title></title>
    <script type="text/javascript"> 
    <!--
     
    var counter = 0;
    
    window.onload = function ()
    {
    	document.getElementById('moreFields').onclick = moreFields;
    	moreFields();
    }
     
    function moreFields()
    {
    	counter++;
    	var newFields = document.getElementById('readroot').cloneNode(true);
    	newFields.id = '';
    	newFields.style.display = 'block';
    	var newField = newFields.childNodes;
    	for (var i=0;i<newField.length;i++)
      {     
    		var theName = newField[i].name
    		if (theName)
        {
        	newField[i].name = theName + '[' + counter + ']';
        	newField[i].id = theName + '[' + counter + ']';    
        }       
    	}
    	var insertHere = document.getElementById('writeroot');
    	insertHere.parentNode.insertBefore(newFields,insertHere);
    }
     
    function calc(formular, txtbox_name, total_name)
    { 
      var total = 0;
      //nur gewünschte Felder addieren
      var txtbox_search = '^' + txtbox_name + '\\[';
                    
      for(i=0; i < formular.form.elements.length; i++)
      {  
        if(formular.form.elements[i].type == 'text' && formular.form.elements[i].name.search(txtbox_search) != -1)
        {
          //Komma tauschen
          var ElVal = formular.form.elements[i].value.replace(',','.') 
          
          //Zahl prüfen
          if (!isNaN(parseFloat(ElVal))) 
            total += Number(ElVal);
        }
      }
       document.getElementById(total_name).innerHTML = 'Gesamt: '+total;
    }
    
    
    // -->
    </script>
    </head>
     
    <body>
     
    <h3>Rechnen</h3>
     
      
    <div id="readroot" style="display: none">
          
      <input onKeyUp="calc(this, 'price', 'total');" type="text" name="price">
      <input type="button" value="Entfernen" onclick="this.parentNode.parentNode.removeChild(this.parentNode); calc(this, 'price', 'total');"/><br /><br />
     
    </div>
     
    <form>
     
    	<span id="writeroot"></span>
       
    	<input type="button" id="moreFields" value="Neue Zeile" />
      <br><br>
      <div id="total"></div>
    </form>
    
    </body>
    </html>

  • #2
    Zitat von mr_apollon Beitrag anzeigen
    Zuerst einmal würde ich mich über Verbesserungsvorschläge der Funktion calc() und der enthaltenen RegEx sehr freuen
    Verbesserungsvorschlag: Raus mit den Regex.

    Nutze stattdessen bspw. eine Klasse, um Felder als zusammengehörig zu klassifizieren - und frage einfach die Klasse ab, anstatt Mustersuche zu betreiben.

    Außerdem klappt es beim Entfernen der Zeile nicht, das neu kalkuliert wird?
    Nachdem du den Elternknoten entfernt hast, ist beim Aufruf von calc vermutlich nicht mehr besonders viel sinnvolles „this“ übrig.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar

    Lädt...
    X