LOGIN
Reg&iuacute;strateLinksForosPrivadosPrivadosContacta
 
FOROS > Programación
< 1 2 3 4 [5] > >>    Crear los campos de un formulario dinámicamente con javascr ...
14/08/2008    10:43


Registrado: 14/04/2004
Nº mensajes: 491

  Living QuotePrivado  
 
Hola pulp_o, bienvenido 

Sin tener que tocar la función de RemovePerson podrías borrar la última fila usando este botón:

<input type="button" name="borrrar" value="Borrar"
onClick="removePerson(document.getElementById('tablaFormulario')
.rows[document.getElementById('tablaFormulario').rows.length-1])">

al row.length le resto 1 porque mi tabla tiene una fila superior que hace de cabecera. Si tú tabla no tiene cabecera y solamente son registros, no hace falta restarle nada. Si tienes sin embargo 3 filas antes de los registros pues tendrás que restarle 3.

Bueno, tendrás que comprobar que no quedan más filas que borrar para desactivar el botón y cosas así. Pero eso ya lo dejo en tus manos :).

Un saludo!
 
 

El mayor placer de un hombre inteligente es aparentar ser idiota, delante de un idiota que aparenta ser inteligente.



 
14/08/2008    19:02

 
Registrado: 14/08/2008
Nº mensajes: 2

  pulp_o QuotePrivado  
 
Quedó exelente el botón, muchas gracias por tu ayuda y espero poder ser un aporte para este foro.

De nuevo gracias.

 
 
 
15/08/2008    15:38


Registrado: 14/04/2004
Nº mensajes: 491

  Living QuotePrivado  
 
Me alegro mucho de que te haya servido 
 
 

El mayor placer de un hombre inteligente es aparentar ser idiota, delante de un idiota que aparenta ser inteligente.



 
20/08/2008    20:24

 
Registrado: 20/08/2008
Nº mensajes: 4

  Daniken QuotePrivado  
 
Hola Living, soy nuevo por acá pero de igual forma quiero agradecerte este maravilloso codigo. Le he realizado algunas modificaciones y adiciones  pero no soy muy diestro en la matería por lo que recurro a tu ayuda.

Tengo 4 campos que son cantidad, item, precio y total, y deseo que cuando coloque el la cantidad y termine de colocar el precio, se actualice el total. A continuación te coloque el codigo con el cual estoy trabajando pero que me da líos

<script language="javascript" type="text/javascript">
var indiceFilaFormulario=1;
function addPerson(){
 myNewRow = document.getElementById("tablaFormulario").insertRow(-1);
 myNewRow.id=indiceFilaFormulario;
 myNewCell=myNewRow.insertCell(-1);
 myNewCell.innerHTML="<td><input size='6' type='text' name='cant["+indiceFilaFormulario+"]' ></td>";
 myNewCell=myNewRow.insertCell(-1);
 myNewCell.innerHTML="<td> <input size='60' type='text' name='item["+indiceFilaFormulario+"]' ></td>";
 myNewCell=myNewRow.insertCell(-1);
 myNewCell.innerHTML="<td><input size='7'  type='text' name='precio["+indiceFilaFormulario+"]' onKeyUp=fncActualizar("+indiceFilaFormulario+")></td>";
 myNewCell=myNewRow.insertCell(-1);
   myNewCell.innerHTML="<td><input  size='10' type='text' name='total["+indiceFilaFormulario+"]' </td>";
 myNewCell=myNewRow.insertCell(-1);
  myNewCell.innerHTML="<td><input class='red' type='button'  value='-' onclick='removePerson(this)'></td>";
 indiceFilaFormulario++;

}
 
function removePerson(obj){
 var oTr = obj;
 while(oTr.nodeName.toLowerCase()!='tr'){
  oTr=oTr.parentNode;
 }
 var root = oTr.parentNode;
 root.removeChild(oTr);
}
</script>
<script language="javascript">


function fncActualizar(indiceFilaFormulario)
{
var f = document.forms['formulario'];
f.total[indiceFilaFormulario].value = f.cant[indiceFilaFormulario].value  *  f.precio[indiceFilaFormulario].value;
};
</script>


Gracias por anticipado
 
 
 
20/08/2008    22:13


Registrado: 14/04/2004
Nº mensajes: 491

  Living QuotePrivado  
 
Hola Daniken

He hecho dos cambios, uno en el formulario y otro en la función fnActualizar. En el formulario he puesto id's a los campos  precio, cantidad y total. Así es más fácil acceder a ellos cuando hagamos los cálculos y por otro lado he modificado fnActualizar para que use esas ids.

<script language="javascript" type="text/javascript">
var indiceFilaFormulario=1;
function addPerson(){
 myNewRow = document.getElementById("tablaFormulario").insertRow(-1);
 myNewRow.id=indiceFilaFormulario;
 myNewCell=myNewRow.insertCell(-1);
 myNewCell.innerHTML="<td><input size='6' type='text' name='cant["+indiceFilaFormulario+"]' id='cant"+indiceFilaFormulario+"' onKeyUp='fncActualizar("+indiceFilaFormulario+")'></td>";
 myNewCell=myNewRow.insertCell(-1);
 myNewCell.innerHTML="<td> <input size='60' type='text' name='item["+indiceFilaFormulario+"]' ></td>";
 myNewCell=myNewRow.insertCell(-1);
 myNewCell.innerHTML="<td><input size='7'  type='text' name='precio["+indiceFilaFormulario+"]' id='precio"+indiceFilaFormulario+"' onKeyUp='fncActualizar("+indiceFilaFormulario+")'></td>";
 myNewCell=myNewRow.insertCell(-1);
   myNewCell.innerHTML="<td><input  size='10' type='text' name='total["+indiceFilaFormulario+"]' id='total"+indiceFilaFormulario+"' value='0'> </td>";
 myNewCell=myNewRow.insertCell(-1);
  myNewCell.innerHTML="<td><input class='red' type='button'  value='-' onclick='removePerson(this)' ></td>";
 indiceFilaFormulario++;

}
 
function removePerson(obj){
 var oTr = obj;
 while(oTr.nodeName.toLowerCase()!='tr'){
  oTr=oTr.parentNode;
 }
 var root = oTr.parentNode;
 root.removeChild(oTr);
}
</script>
<script language="javascript">


function fncActualizar(indiceFilaFormulario)
{
var total = document.getElementById("total"+indiceFilaFormulario);
var precio = document.getElementById("precio"+indiceFilaFormulario);
var cant = document.getElementById("cant"+indiceFilaFormulario);
total.value = precio.value  *  cant.value;
};
</script>

Espero que te sirva!!

Un saludo
 
 

El mayor placer de un hombre inteligente es aparentar ser idiota, delante de un idiota que aparenta ser inteligente.



 
20/08/2008    22:32

 
Registrado: 20/08/2008
Nº mensajes: 4

  Daniken QuotePrivado  
 
Hey Living muchas gracias, todo excelente, y muy agradecido por tu prontitud. Un abrazo y mis respetos
 
 
 
21/08/2008    05:59

 
Registrado: 20/08/2008
Nº mensajes: 4

  Daniken QuotePrivado  
 
Hola Living nuevamente muchas gracias por tu ayuda, y disculpa que te vuelva a molestar pero me volvi a atorar con otra cosita.

Tengo un campo llamado 'sub' el cual debe almacenar la suma del campo 'total' de cada una de las filas, pero como lo tengo actualmente en vez de sumarlo  lo ke hace es concatenar las cifras unas tras otras, a ver si me puedes hechar una manita y nuevamente muchas gracias

function fncActualizar(indiceFilaFormulario)
{
var total = document.getElementById("total"+indiceFilaFormulario);
var precio = document.getElementById("precio"+indiceFilaFormulario);
var cant = document.getElementById("cant"+indiceFilaFormulario);
total.value = precio.value  *  cant.value;

var sub = document.getElementById("sub");
sub.value += total.value

};
 
 
 
21/08/2008    15:53


Registrado: 14/04/2004
Nº mensajes: 491

  Living QuotePrivado  
 
Ten en cuenta que estás sumando cadenas, si quieres sumar números previamente has de convertir las cadenas (con parseInt o parseFloat)

function fncActualizar(indiceFilaFormulario)
{
var total = document.getElementById("total");
var precio = document.getElementById("precio");
var cant = document.getElementById("cant");
total.value = precio.value  *  cant.value;

var sub = document.getElementById("sub");
if (sub.value=="" || isNaN(sub.value)) sub.value=0;
if (total.value=="" || isNaN(total.value)) total.value=0;
sub.value = parseInt(sub.value) + parseInt(total.value);
};


De todas formas este código no va a servir para tu propósito porque lo que tienes que hacer es sumar todos los totales cada vez que cambies un valor. Porque imagina que tenemos 3 totales, que suman 18, y cambiamos el total de uno de ellos, imagínate que teníamos un 8 y metemos un 6. Pues según tu código pasaríamos a tener 26 (18+8) y no 20 que sería el resultado correcto.
 
 

El mayor placer de un hombre inteligente es aparentar ser idiota, delante de un idiota que aparenta ser inteligente.



 
29/12/2008    17:47

 
Registrado: 29/12/2008
Nº mensajes: 1

  Maderik QuotePrivado  
 
Hola Living, la verdad esta muy buena tu aplicaciòn, me gustaria sàber despues de agregar datos si los quiere recuperar en un mismo formulario es decir, visualizar esos datos que se fueron a la tabla, no se sì me explico.
 
Por ejemplo tengo una juego de cuadro textos el cual no es muy funcional, en el sentido que tengo ya delimitado a 4 personas unicamente, si lleno estos campos los manda a una tabla en particular, cuando regreso a ver los datos de registro primario en el mismo formulario este ya se visualizan los datos que agregue.

Para tu ejemplo como podria tener este modulo en mi formulario de registro, agregar 3 personas y cuando entre al formulario dando el registro primario pueda verse los datos de las 3 personas que agregue.

Te lo agradeceria mucho.

P.D. si de casualidad conoces sobre listbox que pueda seleccionar no uno solo sino varios datos utilizando el control y estos mismos madarlos a cuadro te texto mediante php asi tambièn me mande su index.

Mas o menos tengo esto:

<select name="comboPersonas" size="5" multiple id="comboPersonas">
 <option>Antonio</option>
 <option>Bernardo</option>
 <option>Genaro</option>
 <option>Lorenzo</option>
 <option>Santiago</option>
 <option>Santos</option>
 <option>Tania</option>
</select>

de aquì mandarlo a un text.

Te lo agradeciria muchisisisimo.

Gracias
 
 
 
04/01/2009    06:47


Registrado: 04/01/2009
Nº mensajes: 5

  Selena QuotePrivado  
 
Hola Living soy nueva en este foro tengo unas complicaciones que espero que me puedan ayudar he utilizado el codigo que esta en discusion le hecho unos cambios por que mi intension es calcular el subtotal de una serie de productos con un total final
Este es el codigo:

function sumar() {
  tabla = document.getElementById(tablaFormulario);
  filas = tab.getElementsByTagName('tr');
  sum = new Array(filas.length);
  for (i=0; i<sum.length; i++)
    sum[i]=0;
  for (i=2, tot=filas.length-1; i<tot; i++) {
    total = 0;
    celdas = filas[i].getElementsByTagName('td');
    for (j=2, to=celdas.length-1; j<to; j++) {
      num = parseFloat(celdas[j].innerHTML);
      if (isNaN(num)) num = 0;
      total += num;
      sum[j-2] += num;
    } // end for j
    celdas[celdas.length-1].innerHTML = total;
    sum[j-2] += total;
  } // end for i
 
  subt = filas[filas.length-1].getElementsByTagName('td');
  for (i=2, tot=subt.length; i<tot; i++)
    subt[i].innerHTML = sum[i-2];
}

En verdad no se porque no me corre, Espero que me puedas ayudar con esta duda   

 
 

Selena


 
       < 1 2 3 4 [5] > >>