Kleines Problem beim Rechnen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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
    Originally posted by mr_apollon View Post
    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.

    Comment

    Working...
    X