Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] Sumar números de array

Estas en el tema de Sumar números de array en el foro de Jquery en Foros del Web. Hola, estoy tratando de hacerme una app web para hacer facturas y tengo varias dudas de como hacer según que cosas. el código esta aquí ...
  #1 (permalink)  
Antiguo 14/10/2015, 15:17
 
Fecha de Ingreso: octubre-2015
Ubicación: españa
Mensajes: 53
Antigüedad: 8 años, 6 meses
Puntos: 1
Sumar números de array

Hola, estoy tratando de hacerme una app web para hacer facturas y tengo varias dudas de como hacer según que cosas.

el código esta aquí https://jsfiddle.net/gf2pkks2/ para que lo veáis funcionando y todo lo que usa para ello.

Sobre todo ahora mismo tengo la duda para sumar y restar los totales, tengo conseguido que me lo haga sobre la linea de inserción de datos, pero no que me lo sume en el total definitivo.

también al borrar debería recalcular los importes.

he buscado ejemplos de código que suma arrays pero nada...

Por si a alguien le sirve el código hace lo siguiente:
-Te permite agregar lineas dinamicamente ( yo lo he puesto con <b> por que no quiero que se puedan editar ya que va a guardarse en mysql según se agrega cada linea y claro si se edita directamente puede ser una locura )

-También permite ordenar las lineas ya insertadas arrastrándolas por si acaso quieres cambiar el orden

Última edición por killpe; 15/10/2015 a las 02:45 Razón: el titulo era muy ambiguo
  #2 (permalink)  
Antiguo 19/10/2015, 14:09
 
Fecha de Ingreso: enero-2014
Ubicación: Navarra
Mensajes: 94
Antigüedad: 10 años, 3 meses
Puntos: 18
Respuesta: Sumar números de array

Hola.

para poder obtener el total podrias hacer un funcion y llamarla cada vez que quieras.

Código HTML:
Ver original
  1. function muestra_total(){
  2.         var suma = 0;
  3.         var totales = $('input[name^=total]');
  4.       totales.each(function(){
  5.       var valor = $(this).val();
  6.         if (!isNaN(valor)){
  7.         suma += parseFloat(valor);
  8.         }else{
  9.         return true;
  10.         }
  11.        });
  12.       $('input[name=Subtotal]').val(suma);   
  13.       };

Recuerda ponerla fuera de $(document).ready()

He hechado un vistazo al codigo que has hecho y lo veo un tanto complicado el borrar articulos etc.

Suerte !
saludos
  #3 (permalink)  
Antiguo 20/10/2015, 02:47
 
Fecha de Ingreso: octubre-2015
Ubicación: españa
Mensajes: 53
Antigüedad: 8 años, 6 meses
Puntos: 1
Respuesta: Sumar números de array

Cita:
Iniciado por sintel_1 Ver Mensaje
Hola.

para poder obtener el total podrias hacer un funcion y llamarla cada vez que quieras.

Código HTML:
Ver original
  1. function muestra_total(){
  2.         var suma = 0;
  3.         var totales = $('input[name^=total]');
  4.       totales.each(function(){
  5.       var valor = $(this).val();
  6.         if (!isNaN(valor)){
  7.         suma += parseFloat(valor);
  8.         }else{
  9.         return true;
  10.         }
  11.        });
  12.       $('input[name=Subtotal]').val(suma);   
  13.       };

Recuerda ponerla fuera de $(document).ready()

He hechado un vistazo al codigo que has hecho y lo veo un tanto complicado el borrar articulos etc.

Suerte !
saludos
Muchas gracias :corazón: una pregunta ¿por que fuera del document ready? dentro de un document ready no se pueden poner funciones?
  #4 (permalink)  
Antiguo 20/10/2015, 04:30
 
Fecha de Ingreso: enero-2014
Ubicación: Navarra
Mensajes: 94
Antigüedad: 10 años, 3 meses
Puntos: 18
Respuesta: Sumar números de array

hola.

El problema es que firefox no reconoce las funciones propias si estan dentro de document ready.

puedes llamar a la funcion dentro de ready, pero tiene que estar fuera de ready para que funcione.

saludos.
  #5 (permalink)  
Antiguo 20/10/2015, 05:40
 
Fecha de Ingreso: octubre-2015
Ubicación: españa
Mensajes: 53
Antigüedad: 8 años, 6 meses
Puntos: 1
Respuesta: Sumar números de array

Genial!! Muchísimas gracias, de verdad, me has salvado la vida...

el código de eliminar con ayuda de tu código lo he resuelto también
  #6 (permalink)  
Antiguo 20/10/2015, 05:44
 
Fecha de Ingreso: octubre-2015
Ubicación: españa
Mensajes: 53
Antigüedad: 8 años, 6 meses
Puntos: 1
Solución definitiva por si a alguien le sirve

Esta es la solución definitiva del problema.

el código html es este:
Código HTML:
<form method="post">

		 <table id="table-data">
	   <thead>
		   <tr> 
			   <th class="primera 10porcien">Nombre</th>
			   <th class="centro_listados 10porcien">cantidad</th>
			   <th class="centro_listados 10porcien">precio</th>
			   <th class="centro_listados 10porcien">Total</th>
			   <th class="ultima 10porcien">Opciones</th>
			</tr>
		</thead>
		
		<tbody id="itemRows" class="ordenable" style="background: white;">
	<tr>
		<td><input type="text" name="nombre" placeholder="Nombre"></td>
		<td><input type="text" name="cantidad" id="cantidad" placeholder="Cantidad"></td>
		<td><input type="text" name="precio" id="precio" placeholder="precio" value="100"></td>
		<td><input type="text" name="total" disabled id="total" placeholder="Total"></td>
		<td><input onclick="AddLinea(this.form);" type="button" class="botonverde" value="agregar" /></td>
	</tr>
		</tbody>
		 </table>
	</form>
</div>
<br />
            <div id="Totales">
                Subtotal <input type="text" name="Subtotal" placeholder="Subtotal"><br />
                Impuestos <input type="text" name="Impuestos" placeholder="Impuestos"><br />
                Total <input type="text" name="Supertotal" placeholder="Total">
             </div>            
<script>   
var LineaNum = 0;
function AddLinea(frm) {
	LineaNum ++;
	var Linea = '<tr id="LineaNum'+LineaNum+'"><td><b>'+frm.nombre.value+'</b></td><td><b>'+frm.cantidad.value+'</b></td><td><b>'+frm.precio.value+'</b></td><td><input type="text" name="total[]" disabled value="'+frm.total.value+'"></td><td><input type="button" class="botonrojo" value="Borrar" onclick="EliminarLinea('+LineaNum+','+frm.total.value+');"></td></tr>';
	jQuery('#itemRows').append(Linea);
	frm.nombre.value = '';
	frm.cantidad.value = '';
	frm.precio.value = '';
	frm.total.value = '';
}


function EliminarLinea(rnum,descontar) {
	jQuery('#LineaNum'+rnum).remove();
        var subtotal = $('input[name=Subtotal]').val();
         if (!isNaN(descontar)){ subtotal -= parseFloat(descontar);
      	}else{
        return true;
        }
         
      $('input[name=Subtotal]').val(subtotal); 
    
}
</script> 
este el jQuery

Código:
$(document).ready(function() {    
//suma subtotales
        $("#cantidad, #precio").keyup(function (e) {
            var canti = $("#cantidad").val();
            var preci = $("#precio").val();
            var iva = $("#iva").val();
            //var resultado = parseFloat(mat) + parseFloat(price);
            var baseimpo = parseFloat(canti) * parseFloat(preci);
            $("#total").val(baseimpo);
            sumar_total();
        });

 //suma totales
 function sumar_total(){
       		var subtotal = 0;
        	var totales = $('input[name^=total]');
      totales.each(function(){
     		var valor = $(this).val();
        if (!isNaN(valor)){ subtotal += parseFloat(valor);
      	}else{
        return true;
        }
       }); 
      $('input[name=Subtotal]').val(subtotal);    
};
    
//ordenable  	
 	$( ".ordenable" ).sortable({
        stop: function () {
            var inputs = $('input.posicion');
            var nbElems = inputs.length;
            $('input.posicion').each(function(idx) {
                $(this).val(nbElems - idx);
            });
        }
    });
    $( ".ordenable" ).disableSelection();   
          
});
y aqui lo podeis ver funcionando https://jsfiddle.net/gf2pkks2/13/

faltaria por poner los impuestos y total mas impuestos pero con este código es simplemente meter otro calculo para los impuestos y que escriba el total definitivo...


Muchísimas gracias a todos ( sobre todo a sintle_1 ) por la ayuda

Etiquetas: facturas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:58.