¿Cómo sumar el resultados de los imputs dependiendo de donde se ха introducido доблесть ООН?

Таблица Tengo esta надела меня, gustaría mostrar la suma de los valores calculados de acuerdo подставляет el textbox надетый se están introduciendo Лос доблесть.

Количество Es decir que si multiplico por Price el o Лос доблесть que aparezcan en importe aparezcan sumados en SUB-Total

Lo mismo СИ multiplico Количество por gr, el o los importes sumados aparezcan en GR en la parte нижний y que dada la suma de SUB-Total y GR de el Total.

Соло Por ahora он podido sumar las columnas, pero la suma никакой es correcta ya que omita la multiplicación.

Довод "против" Adjunto el código y espero haber sido claro el problema que planteo.

introducir la descripción de la imagen aquí

Ми Aqui adjunto código:

 

SUB-Total
GR:
Total:
Crear factura:

Сын Tenga en consideración que las filas incrementables.

1
задан 20.12.2019, 18:59
1 ответ

Я оставляю тебе прокомментированному части, которые modifiquГ© с одной explicaciГіn, я жду, будьте то, что ты ищешь, любое сомнение сообщи ее. :)

function addRow(tableID) {
        var table = document.getElementById(tableID);
        var rowCount = table.rows.length;
        if (rowCount < 10) {
            var row = table.insertRow(rowCount);

            var colCount = table.rows[0].cells.length;
            row.id = 'row_' + rowCount;
            for (var i = 0; i < colCount; i++) {
                var newcell = row.insertCell(i);
                newcell.outerHTML = table.rows[0].cells[i].outerHTML;
            }
            var listitems = row.getElementsByTagName("input")
            for (i = 0; i < listitems.length - 1; i++) {
                listitems[i].setAttribute("oninput", "calculate('" +
                    row.id + "')");
            }
            listitems[listitems.length - 1].setAttribute("onclick", "removeRow('dataTable', " + row.id.replace("row_", "") + ")");
        } else {
            alert("Maximum 10.");

        }
    }


    function removeRow(tableID, index) {
        //Removing the row
        var table = document.getElementById(tableID);
        table.deleteRow(index);
        //Modifying the ids of subsequent rows
        var rowCount = table.rows.length;
        for (var i = index; i < rowCount; i++) {
            table.rows[i].id = "row_" + i;
            table.rows[i].getElementsByClassName("remove")[0].setAttribute("onclick", "removeRow('dataTable', " + i + ");");
        }
        //Handling the counts
        grandtotal();
    }


    function calculate(elementID) {
        var mainRow = document.getElementById(elementID);
        var myBox1 = mainRow.querySelectorAll('[class=qty]')[0].value;
        var myBox2 = mainRow.querySelectorAll('[class=cost]')[0].value;
		var myBox3 = mainRow.querySelectorAll('[class=gr]')[0].value;
        var total = mainRow.querySelectorAll('[class=subtotal]')[0];
        
        //tenías un error estabas concatenando strings, tienes que utilizar parseFloat()
        //o parseInt para convertirlos a números aunque por alguna extraña razón al usar Number no te convertía a número
        var myResult1 = parseFloat(myBox1) * (parseFloat(myBox2) + parseFloat(myBox3));
        
        //validamos que ingrese el número el usuario
        if(isNaN(parseFloat(myBox2)) || isNaN(parseFloat(myBox3))){
        $('#total_cost').val(0);
        $('#total_gr').val(0);
        
        
        }else{
        
        //Si ya ingreso los números se agrega el valor de price multiplicado por quantity
		    var qP = parseFloat(myBox1) * parseFloat(myBox2);
          $('#total_cost').val(qP);
          //de igual forma pero con gr
          var qGr = parseFloat(myBox1) * parseFloat(myBox3);
          $('#total_gr').val(qGr);
        
        total.value = myResult1;
		
		
		
		
		

        grandtotal();
	  }
    }

    function grandtotal(){

        //calculation script
        var form = $('#add_service'),
            sumDisplay = $('#grand_total');

        var summands = form.find('.subtotal');
        var sum = 0;
        summands.each(function ()
        {
            var value = parseFloat($(this).val());
            if (!isNaN(value)) sum += value;
        });

        sumDisplay.val(sum);
    }
	
	
	function sumargr() {

  var total = 0; //inicimos una variable para concatenarle la suma de los inputs

  $(".gr").each(function() { //recorremos el arreglo 

    if (isNaN(parseFloat($(this).val()))) { //con la propiedad this obtenemos el valor del input donde estemos escribiendo y validamos que no sea un número
    //si no lo es agregamos un 0

      total += 0;

    } else {
//si lo es sumamos ese mismo valor
      total += parseFloat($(this).val());

    }

  });

  //agregaos el valor al input que corresponde
  document.getElementById('total_gr').value = total;

}



function sumarcost() {

  var total = 0;

  $(".cost").each(function() {

    if (isNaN(parseFloat($(this).val()))) {

      total += 0;

    } else {

      total += parseFloat($(this).val());

    }

  });

  document.getElementById('total_cost').value = total;

}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body>
<div class="container">

    <input type="button" value="Add" onClick="addRow('dataTable')"/>

    <form name="add_name" id="add_service">

        <table id="dataTable" class="form" border="1">
            <tbody>
            <tr id='row_0'>

                <td>
                    <label>Service</label>
                    <input type="text" required="required" name="service[]">
                </td>
                <td>
                    <label>Quantity</label>
                    <!--LE agregué el atributo min para que solo pueda ingresar del numero 1 en adelante.-->
                    <input type="number" class="qty" min="1" size="2" name="qty[]" oninput="calculate('row_0')">
                </td>
                <td>
                    <label for="price">Price</label>
                    <input type="text" class="cost" required="required" name="cost[]" oninput="calculate('row_0')" onkeyup="sumarcost()">
                </td>
				 <td>
                    <label for="gr">gr</label>
                    <input type="text" class="gr" required="required"  name="gr[]" oninput="calculate('row_0')" onkeyup="sumargr()">
                </td>
                <td>
                    <label for="total">Importe</label>
                    <input type="text" class="subtotal" required="required" readonly name="subtotal[]">

                </td>

                <td>
                    <input type="button" class="remove" value="Remove" onclick="removeRow('dataTable', '0');">
                </td>
            </tr>
            </tbody>
        </table>

		<table>
      
			<tr><td>SUB-Total</td><td><input type="text" class="" placeholder="Total de costos" id="total_cost" readonly></td></tr>
			<tr><td>GR:</td><td><input type="text" class="" placeholder="total gr" id="total_gr" readonly></td></tr>
          <tr><td> Total:</td><td> <input type="text" class="" placeholder="Grand total" id="grand_total" readonly></td></tr>
        

       <tr><td> Crear factura:</td><td> <input type="button" name="submit" id="submit" class="btn btn-info" value="Submit"/></td></tr>
		</table>
    </form>

</div>



</body>
0
ответ дан 21.12.2019, 12:12
  • 1
    Привет vick, стоимость умножения не появляется в неударе в лунку сумма и imput ГРАММ И СУБ-ОБЩЕЕ КОЛИЧЕСТВО также не появляется стоимость – leonardo rodriguez2 20.12.2019, 21:32