Foros del Web » Programando para Internet » Javascript »

Crear y remover inputs

Estas en el tema de Crear y remover inputs en el foro de Javascript en Foros del Web. Buenas, He conseguido modificar el siguiente script y me permite agregar o quitar nuevas "cajas inputs", pero sabría de que forma tengo que decirle para ...
  #1 (permalink)  
Antiguo 07/12/2009, 11:17
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Crear y remover inputs

Buenas,

He conseguido modificar el siguiente script y me permite agregar o quitar nuevas "cajas inputs", pero sabría de que forma tengo que decirle para que en lugar de añadir una caja texto, me agregase toda una fila de 4 inputs.

Este el código, es 100% funcional.

Código html:
Ver original
  1. <title>Agregar y/o quitar cajas </title>
  2. body, td, th, div, p {
  3. color:#000000;
  4. font-family:"Lucida Grande",Verdana,Arial,Helvetica,sans-serif;
  5. font-size:small;
  6. }
  7. dd div {
  8. margin-top:0.3em;
  9. }
  10. a.addlink {
  11. background:transparent url(add.png) no-repeat scroll left top;
  12. color:#999999;
  13. font-size:0.9em;
  14. padding:1px 0 1px 20px;
  15. text-decoration:none;
  16. }
  17. a.removelink {
  18. background:transparent url(delete.png) no-repeat scroll 4px 0;
  19. color:#999999;
  20. font-size:0.9em;
  21. padding:1px 0 1px 24px;
  22. text-decoration:none;
  23. }
  24. function addhostfield()
  25. {
  26.   var container = document.getElementById('defaulthostlist');
  27.   var row = document.createElement('div');
  28.   var input = document.createElement('input');
  29.   var link = document.createElement('a');
  30.  
  31.   input.name = '_default_host[]';
  32.   input.size = '30';
  33.   link.href = '#';
  34.   link.onclick = function() { removehostfield(this.parentNode); return false };
  35.   link.className = 'removelink';
  36.   link.innerHTML = 'remove';
  37.  
  38.   row.appendChild(input);
  39.   row.appendChild(link);
  40.   container.appendChild(row);
  41. }
  42.  
  43. function removehostfield(row)
  44. {
  45.   var container = document.getElementById('defaulthostlist');
  46.   container.removeChild(row);
  47. }
  48. </head>
  49. <dd>
  50. <div>Agregar cajas y/o quitar cajas</div><br/>
  51. <div id="defaulthostlist">
  52. <div id="defaulthostentry0"><input type="text" value="" size="30" name="_default_host[]"/></div></div>
  53. <div><a title="Add another field" class="addlink" href="javascript:addhostfield()">add</a></div>
  54. </dd>
  55.  
  56. <!-- Hacer lo mismo pero con 4 inputs en horizontal -->
  57. <input type="text" value="" size="30" name="cantidad"/>
  58. <input type="text" value="" size="30" name="descripcion"/>
  59. <input type="text" value="" size="30" name="precio"/>
  60. <input type="text" value="" size="30" name="total"/>
  61.  
  62. </body>
  63. </html>

¿Alguna idea?

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 07/12/2009, 12:01
Avatar de dggluz  
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 525
Antigüedad: 15 años
Puntos: 50
Respuesta: Crear y remover inputs

Neodani: el código de ahí está bastante claro: crea nodos y los agrega al formulario. Es fácil de modificar. Si no lo entiendes, creo que mejor que yo puede explicarlo este capítulo de este manual de javascript que encontré por la red. No puedo modificar el código por ti, sólo ayudarte, ya que el objetivo es que aprendas . ¡Suerte!

PD: haz el intento tú; si no te sale, postea tu código y en eso sí te podré ayudar con más precisión.

PD2: ten en cuenta que si quieres procesar el formulario, para que PHP (hablo de PHP porque es el único lenguaje de servidor que manejo con soltura) pueda tomar el valor de todos los campos (por ejemplo, todos los campos precio), el nombre tiene que estar seguido de un par de corchetes ('precio[]') de modo que para PHP cada campo sea una nueva entrada a un array llamado $_REQUEST['nombre'] (o POST o GET, según tu método).

PD3: me quedé un poco mal ofreciendo tan poca ayuda. Para que no pierdas mucho tiempo, el código que está añadiendo campos es este:
Código javascript:
Ver original
  1. #
  2. function addhostfield()
  3. {
  4.   var container = document.getElementById('defaulthostlist');
  5.   // La creación de nodos es "en el aire", por eso se guardan en variables
  6.   // los nodos recién se añadirán al DOM (a la página) cuando les hagamos un "append"
  7.   // Crea el nodo 'div'
  8.   var row = document.createElement('div');
  9.   // Crea el nodo 'input'
  10.   var input = document.createElement('input');
  11.   // Crea el nodo 'a' (un link)
  12.   var link = document.createElement('a');
  13.  
  14.   // Setea algunas propiedades del nodo input que creó:
  15.   // setea el nombre
  16.   input.name = '_default_host[]';
  17.   // setea el tamaño
  18.   input.size = '30';
  19.   // Es raro que no haya seteado el "tipo" de input (debería ser "text"), yo lo haría así: input.type='text';
  20.  
  21.   // Ahora setea propiedades del nodo "a" que creó
  22.   // setea adónde apunta
  23.   link.href = '#';
  24.   // setea la función onclick, según parece para que al cliquear en ese link, puedan removerse del DOM todos los nodos que está creando
  25.   link.onclick = function() { removehostfield(this.parentNode); return false };
  26.   // Como "class" es una palabra reservada en javascript, para acceder al atributo "class" de HTML, se usa la propiedad "className"
  27.   link.className = 'removelink';
  28.   // "innerHTML" significa "HTML interior", simplemente está seteando el "texto" del link
  29.   link.innerHTML = 'remove';
  30.  
  31.   // Ahora "engancha los nodos"
  32.   // Primero le agrega al nodo "div" que había creado el nodo "input" que también creó
  33.   row.appendChild(input);
  34.   // Hace lo mismo con el nodo link
  35.   row.appendChild(link);
  36.   // Ahora sí, se agrega el nodo "div" (que tiene al nodo link y al nodo input añadidos) a un nodo que ya estaba en el DOM, y por lo tanto, se agregan todos ellos al DOM
  37.   container.appendChild(row);
  38. }
Lo comenté para que quede más claro qué es lo que está haciendo paso a paso.

Última edición por dggluz; 07/12/2009 a las 12:24
  #3 (permalink)  
Antiguo 07/12/2009, 15:54
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Crear y remover inputs

tambien puedes intentar con cloneNode. con este puedes clonar un elemento con todos sus hijos y atributos de modo que no tienes que crear cada elemento. lo que yo suelo hacer es tener los elementos, al menos una sola vez, en el documento. luego busco ese elemento y lo clono. a partir de ahi sigo clonando la referencia y la agrego al documento. en tu caso, la seccion que quieres duplicar es esta (segun por el comentario)
Código:
<!-- Hacer lo mismo pero con 4 inputs en horizontal -->
<input type="text" value="" size="30" name="cantidad"/>
<input type="text" value="" size="30" name="descripcion"/>
<input type="text" value="" size="30" name="precio"/>
<input type="text" value="" size="30" name="total"/>
ahora bien, al menos necesitas que dichos elementos tenga un elemento padre, por ejemplo un P, para clonar todos sin mucho codigo.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #4 (permalink)  
Antiguo 07/12/2009, 16:26
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Crear y remover inputs

Cita:
Iniciado por dggluz Ver Mensaje
Neodani: el código de ahí está bastante claro: crea nodos y los agrega al formulario. Es fácil de modificar. Si no lo entiendes, creo que mejor que yo puede explicarlo este capítulo de este manual de javascript que encontré por la red. No puedo modificar el código por ti, sólo ayudarte, ya que el objetivo es que aprendas . ¡Suerte!

PD: haz el intento tú; si no te sale, postea tu código y en eso sí te podré ayudar con más precisión.

PD2: ten en cuenta que si quieres procesar el formulario, para que PHP (hablo de PHP porque es el único lenguaje de servidor que manejo con soltura) pueda tomar el valor de todos los campos (por ejemplo, todos los campos precio), el nombre tiene que estar seguido de un par de corchetes ('precio[]') de modo que para PHP cada campo sea una nueva entrada a un array llamado $_REQUEST['nombre'] (o POST o GET, según tu método).

PD3: me quedé un poco mal ofreciendo tan poca ayuda. Para que no pierdas mucho tiempo, el código que está añadiendo campos es este:
Código javascript:
Ver original
  1. #
  2. function addhostfield()
  3. {
  4.   var container = document.getElementById('defaulthostlist');
  5.   // La creación de nodos es "en el aire", por eso se guardan en variables
  6.   // los nodos recién se añadirán al DOM (a la página) cuando les hagamos un "append"
  7.   // Crea el nodo 'div'
  8.   var row = document.createElement('div');
  9.   // Crea el nodo 'input'
  10.   var input = document.createElement('input');
  11.   // Crea el nodo 'a' (un link)
  12.   var link = document.createElement('a');
  13.  
  14.   // Setea algunas propiedades del nodo input que creó:
  15.   // setea el nombre
  16.   input.name = '_default_host[]';
  17.   // setea el tamaño
  18.   input.size = '30';
  19.   // Es raro que no haya seteado el "tipo" de input (debería ser "text"), yo lo haría así: input.type='text';
  20.  
  21.   // Ahora setea propiedades del nodo "a" que creó
  22.   // setea adónde apunta
  23.   link.href = '#';
  24.   // setea la función onclick, según parece para que al cliquear en ese link, puedan removerse del DOM todos los nodos que está creando
  25.   link.onclick = function() { removehostfield(this.parentNode); return false };
  26.   // Como "class" es una palabra reservada en javascript, para acceder al atributo "class" de HTML, se usa la propiedad "className"
  27.   link.className = 'removelink';
  28.   // "innerHTML" significa "HTML interior", simplemente está seteando el "texto" del link
  29.   link.innerHTML = 'remove';
  30.  
  31.   // Ahora "engancha los nodos"
  32.   // Primero le agrega al nodo "div" que había creado el nodo "input" que también creó
  33.   row.appendChild(input);
  34.   // Hace lo mismo con el nodo link
  35.   row.appendChild(link);
  36.   // Ahora sí, se agrega el nodo "div" (que tiene al nodo link y al nodo input añadidos) a un nodo que ya estaba en el DOM, y por lo tanto, se agregan todos ellos al DOM
  37.   container.appendChild(row);
  38. }
Lo comenté para que quede más claro qué es lo que está haciendo paso a paso.
Muchas gracias a los dos por vuestros comentarios e interés :)

He intentado clonar el nodo (ya que a simple vista pensaba que era la más facil...) pero no se si lo estoy haciendo bien.

Por otro lado, si no utilizase la técnica de clonar, debería copiar de la linea 31 a la 45 (codigo de primer post) tantas veces como inputs quisiese?? me parece una barbaridad tantas lineas...

Añadí estas lineas para clonar el elemento, y me clona el elemento con sus inputs que ya tenía, por lo que va duplicándose cada vez más, cuando pulso el boton "add"

var fila = document.getElementById('fila');
cloneNode=fila.cloneNode(true);
fila.appendChild(cloneNode);

Y englobé en un div los 4 inputs
<div id="fila">
<input type="text" value="" size="5" name="cantidad"/>
<input type="text" value="" size="30" name="descripcion"/>
<input type="text" value="" size="5" name="precio"/>
<input type="text" value="" size="5" name="total"/>
<div>
  #5 (permalink)  
Antiguo 07/12/2009, 16:53
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Crear y remover inputs

en el sentido tecnico esta bien. es decir, no genera error de ningun tipo. en el sentido logico quizas esta mal porque estas agregando la nueva clonacion dentro del elemento clonado, pero depende si es lo que querias lograr o no. es decir, te va quedando mas o menos la siguiente estructura. aparte que cada vez presionas el boton se van duplicando los que ya agregastes.
Código:
<div id="fila">
<input type="text" value="" size="5" name="cantidad"/>
<input type="text" value="" size="30" name="descripcion"/>
<input type="text" value="" size="5" name="precio"/>
<input type="text" value="" size="5" name="total"/>
<div id="fila">
<input type="text" value="" size="5" name="cantidad"/>
<input type="text" value="" size="30" name="descripcion"/>
<input type="text" value="" size="5" name="precio"/>
<input type="text" value="" size="5" name="total"/>
<div>
<div>
¿como lo hubiera hecho? pues quizas teniendo una estructura inicial como la siguiente,
Código:
<div id="contenedor"><p> <!-- fijate que ambos tags estan declarados en una misma linea sin separarse -->
<input type="text" value="" size="5" name="cantidad"/>
<input type="text" value="" size="30" name="descripcion"/>
<input type="text" value="" size="5" name="precio"/>
<input type="text" value="" size="5" name="total"/></p>
<div>
[Boton Add]
y el script,
Código:
var container = document.getElementById('contenedor');
container.appendChild(container.firstChild.cloneNode(true));
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #6 (permalink)  
Antiguo 08/12/2009, 05:56
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Crear y remover inputs

He probado como decías ZeroKilled, pero tengo dos problemas.

1 - El botón add aparece 1 vez debajo de la primera caja de texto y luego al pulsar sobre él, aparecen las cajas de texto debajo del botón add y así sucesivamente. En el primer ej. aparecía tb solo una vez pero se iba poniendo al final de cada caja.

2 - No se como incluir el boton "remove" al final del ultimo input de cada linea, tal y como lo he puesto ahora aparece, pero no allí...

Estoy algo perdido...

Código html:
Ver original
  1. <title>Agregar y/o quitar cajas </title>
  2. body, td, th, div, p {
  3. color:#000000;
  4. font-family:"Lucida Grande",Verdana,Arial,Helvetica,sans-serif;
  5. font-size:small;
  6. }
  7. dd div {
  8. margin-top:0.3em;
  9. }
  10. a.addlink {
  11. background:transparent url(add.png) no-repeat scroll left top;
  12. color:#999999;
  13. font-size:0.9em;
  14. padding:1px 0 1px 20px;
  15. text-decoration:none;
  16. }
  17. a.removelink {
  18. background:transparent url(delete.png) no-repeat scroll 4px 0;
  19. color:#999999;
  20. font-size:0.9em;
  21. padding:1px 0 1px 24px;
  22. text-decoration:none;
  23. }
  24. function addhostfield()
  25. {
  26.   /*var container = document.getElementById('defaulthostlist');
  27.   var fila = document.getElementById('fila');
  28.   var row = document.createElement('div');
  29.   var input = document.createElement('input');
  30.   var link = document.createElement('a');
  31.  
  32.   input.name = '_default_host[]';
  33.   input.size = '30';
  34.   link.href = '#';
  35.   link.onclick = function() { removehostfield(this.parentNode); return false };
  36.   link.className = 'removelink';
  37.   link.innerHTML = 'remove';
  38.  
  39.   row.appendChild(input);
  40.   row.appendChild(link);
  41.   container.appendChild(row);*/
  42.  
  43.   var container = document.getElementById('contenedor');
  44.   var link = document.createElement('a');
  45.   link.href = '#';
  46.   link.onclick = function() { removehostfield(this.parentNode); return false };
  47.   link.className = 'removelink';
  48.   link.innerHTML = 'remove';
  49.   container.appendChild(link);
  50.  
  51.   container.appendChild(container.firstChild.cloneNode(true));
  52. }
  53.  
  54. function removehostfield(row)
  55. {
  56.   var container = document.getElementById('contenedor');
  57.   container.removeChild(row);
  58. }
  59. </head>
  60. <div>Agregar cajas y/o quitar cajas</div><br/>
  61.  
  62. <div id="contenedor"><p> <!-- fijate que ambos tags estan declarados en una misma linea sin separarse -->
  63.     <input type="text" value="" size="5" name="cantidad"/>
  64.     <input type="text" value="" size="30" name="descripcion"/>
  65.     <input type="text" value="" size="5" name="precio"/>
  66.     <input type="text" value="" size="5" name="total"/>
  67.     </p>
  68. <div>
  69. <div><a title="Add another field" class="addlink" href="javascript:addhostfield()">add</a></div>
  70. </body>
  71. </html>

Muchas gracias de antemano!
  #7 (permalink)  
Antiguo 08/12/2009, 09:46
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Crear y remover inputs

te dejo un ejemplo que habia hecho para un amigo. no refleja exactamente tu caso pero tiene la misma base: agregar filas, y cada fila tiene un boton independiente para remover las filas. http://coffeescript.awardspace.com/price_unit/. si lo estudias estoy seguro que de ahi podras sacar ideas o soluciones a tu codigo.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #8 (permalink)  
Antiguo 08/12/2009, 10:40
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Crear y remover inputs

Cita:
Iniciado por zerokilled Ver Mensaje
te dejo un ejemplo que habia hecho para un amigo. no refleja exactamente tu caso pero tiene la misma base: agregar filas, y cada fila tiene un boton independiente para remover las filas. http://coffeescript.awardspace.com/price_unit/. si lo estudias estoy seguro que de ahi podras sacar ideas o soluciones a tu codigo.
Muchas gracias zerokilled, tiene muy buena pinta, voy a trastear :)
  #9 (permalink)  
Antiguo 08/12/2009, 11:18
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Crear y remover inputs

Pensaba que solo haría falta este trozo de código

Código javascript:
Ver original
  1. var Handler = {
  2. add: function(elem, event, handler, capture){
  3.     try{
  4.     elem.addEventListener(event, handler, capture);
  5.     } catch(error){
  6.     elem.attachEvent('on' + event, handler);
  7.     }
  8. },
  9.  
  10. remove: function(elem, event, handler, capture){
  11.     try{
  12.     elem.removeEventListener(event, handler, capture);
  13.     } catch(error){
  14.     elem.detachEvent('on' + event, handler);
  15.     }
  16. }
  17. } // Handler;

Pero también hace falta todo el javascript price.js para conseguir el efecto, vaya si que es complicado....

Trasteando un poco he conseguido sacarlo sin utilizar tu código zerokilled. Mira que te parece.

¿Podrías simplificarlo??

Código html:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html>
  3. <title>Crear y remover inputs</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  5. body, td, th, div, p {
  6. color:#000000;
  7. font-family:"Lucida Grande",Verdana,Arial,Helvetica,sans-serif;
  8. font-size:small;
  9. }
  10. input {
  11. margin:0.3em;
  12. }
  13. a.removelink {
  14. background:transparent url(delete.png) no-repeat scroll 4px 0;
  15. color:#999999;
  16. font-size:0.9em;
  17. padding:1px 0 1px 24px;
  18. text-decoration:none;
  19. }
  20. a.addlink {
  21. background:transparent url(add.png) no-repeat scroll left top;
  22. color:#999999;
  23. font-size:0.9em;
  24. padding:1px 0 1px 20px;
  25. text-decoration:none;
  26. cursor:pointer;
  27. }
  28. <script type="text/javascript">
  29. <!--
  30. num=0;
  31. function crear(obj) {
  32.  num++;
  33.  fi = document.getElementById('productos');
  34.  contenedor = document.createElement('div');
  35.  contenedor.id = 'div'+num;
  36.  fi.appendChild(contenedor);
  37.  
  38.  // primer input
  39.  ele = document.createElement('input');
  40.  ele.name = '_default_host[]';
  41.  ele.className = 'cajatexto';
  42.  ele.size = '5';
  43.  contenedor.appendChild(ele);
  44.  
  45.   // segundo input
  46.  ele = document.createElement('input');
  47.  ele.name = '_default_host[]';
  48.  ele.className = 'cajatexto';
  49.  ele.size = '30';
  50.  contenedor.appendChild(ele);
  51.  
  52.   // tercer input
  53.  ele = document.createElement('input');
  54.  ele.name = '_default_host[]';
  55.  ele.className = 'cajatexto';
  56.  ele.size = '5';
  57.  contenedor.appendChild(ele);
  58.  
  59.   // cuarto input
  60.  ele = document.createElement('input');
  61.  ele.name = '_default_host[]';
  62.  ele.className = 'cajatexto';
  63.  ele.size = '5';
  64.  contenedor.appendChild(ele);
  65.  
  66.  // boton eliminar
  67.  ele = document.createElement('a');
  68.  ele.href = '#';
  69.  ele.name = 'div'+num;
  70.  ele.onclick = function () {borrar(this.name)}
  71.  ele.className = 'removelink';
  72.  ele.innerHTML = 'Eliminar';
  73.  contenedor.appendChild(ele);
  74. }
  75. function borrar(obj) {
  76.  fi = document.getElementById('productos');
  77.  fi.removeChild(document.getElementById(obj));
  78. }
  79. -->
  80.  
  81. </head>
  82. <form method="post" action="#">
  83. <div id="productos"></div>
  84. <div><a title="Add another field" class="addlink" onclick="crear(this)">Añadir</a></div>
  85. </form>
  86. </body>
  87. </html>


Salu2!
  #10 (permalink)  
Antiguo 08/12/2009, 11:46
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Crear y remover inputs

por lo pronto, me parece que esta bastante bien. el codigo se parece un poco al que inicialmente tenias pero no esta mal. ¿simplificar el codigo? tendrias que usar cloneNode como en el ejemplo que te mostre en price_unit.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #11 (permalink)  
Antiguo 08/12/2009, 15:23
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Crear y remover inputs

Cita:
Iniciado por zerokilled Ver Mensaje
por lo pronto, me parece que esta bastante bien. el codigo se parece un poco al que inicialmente tenias pero no esta mal. ¿simplificar el codigo? tendrias que usar cloneNode como en el ejemplo que te mostre en price_unit.
Serías tan amable de hacerme el ejemplo de clonar en mi ejemplo anterior? Es que no consigo conseguir el mismo efecto. Este es lo más que he llegado clonando. Y si ejecutas el anterior y este veras que no se comportan igual.

Código html:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html>
  3. <title>Crear y remover inputs</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  5. body, td, th, div, p {
  6. color:#000000;
  7. font-family:"Lucida Grande",Verdana,Arial,Helvetica,sans-serif;
  8. font-size:small;
  9. }
  10. input {
  11. margin:0.3em;
  12. }
  13. a.removelink {
  14. background:transparent url(delete.png) no-repeat scroll 4px 0;
  15. color:#999999;
  16. font-size:0.9em;
  17. padding:1px 0 1px 24px;
  18. text-decoration:none;
  19. }
  20. a.addlink {
  21. background:transparent url(add.png) no-repeat scroll left top;
  22. color:#999999;
  23. font-size:0.9em;
  24. padding:1px 0 1px 20px;
  25. text-decoration:none;
  26. cursor:pointer;
  27. }
  28. <script type="text/javascript">
  29. <!--
  30. num=0;
  31. function crear(obj) {
  32.  num++;
  33.  fi = document.getElementById('productos');
  34.  contenedor = document.createElement('div');
  35.  contenedor.id = 'div'+num;
  36.  fi.appendChild(contenedor);
  37.  
  38.  // boton eliminar
  39.  ele = document.createElement('a');
  40.  ele.href = '#';
  41.  ele.name = 'div'+num;
  42.  ele.onclick = function () {borrar(this.name)}
  43.  ele.className = 'removelink';
  44.  ele.innerHTML = 'Eliminar';
  45.  contenedor.appendChild(ele);
  46.  
  47.  var container = document.getElementById('productos');
  48.  container.appendChild(container.firstChild.cloneNode(true));
  49.  
  50. }
  51. function borrar(obj) {
  52.  fi = document.getElementById('productos');
  53.  fi.removeChild(document.getElementById(obj));
  54. }
  55.  
  56.  
  57. -->
  58.  
  59. </head>
  60. <form method="post" action="#">
  61. <div><a title="Añadir otra fila" class="addlink" onclick="crear(this)">Añadir</a></div>
  62. <div id="productos"><p>
  63. <input type="text" value="" size="5" name="cantidad"/>
  64. <input type="text" value="" size="30" name="descripcion"/>
  65. <input type="text" value="" size="5" name="precio"/>
  66. <input type="text" value="" size="5" name="total"/></p>
  67. <div>
  68. </form>
  69. </body>
  70. </html>

Muchas gracias de antemano
  #12 (permalink)  
Antiguo 08/12/2009, 16:48
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Crear y remover inputs

el elemento que usas para eliminar la fila tienes que agregarla al elemento clonado.
Código:
var clon = elemento.cloneNode(true);
clon.appendChild(elemento_borrar);
luego tienes que arreglar la funcion borrar para que elimie la fila, no el boton como tal.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #13 (permalink)  
Antiguo 09/12/2009, 00:53
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Crear y remover inputs

Cita:
Iniciado por zerokilled Ver Mensaje
el elemento que usas para eliminar la fila tienes que agregarla al elemento clonado.
Código:
var clon = elemento.cloneNode(true);
clon.appendChild(elemento_borrar);
luego tienes que arreglar la funcion borrar para que elimine la fila, no el boton como tal.
No lo consigo, misma situación aun cambiando las cosas...

Código html:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html>
  3. <title>Crear y remover inputs</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  5. body, td, th, div, p {
  6. color:#000000;
  7. font-family:"Lucida Grande",Verdana,Arial,Helvetica,sans-serif;
  8. font-size:small;
  9. }
  10. input {
  11. margin:0.3em;
  12. }
  13. a.removelink {
  14. background:transparent url(delete.png) no-repeat scroll 4px 0;
  15. color:#999999;
  16. font-size:0.9em;
  17. padding:1px 0 1px 24px;
  18. text-decoration:none;
  19. }
  20. a.addlink {
  21. background:transparent url(add.png) no-repeat scroll left top;
  22. color:#999999;
  23. font-size:0.9em;
  24. padding:1px 0 1px 20px;
  25. text-decoration:none;
  26. cursor:pointer;
  27. }
  28. <script type="text/javascript">
  29. <!--
  30. num=0;
  31. function crear(obj) {
  32.  num++;
  33.  fi = document.getElementById('productos');
  34.  contenedor = document.createElement('div');
  35.  contenedor.id = 'div'+num;
  36.  fi.appendChild(contenedor);
  37.  
  38.  // boton eliminar
  39.  ele = document.createElement('a');
  40.  ele.href = '#';
  41.  ele.name = 'div'+num;
  42.  ele.onclick = function () {borrar(this.name)}
  43.  ele.className = 'removelink';
  44.  ele.innerHTML = 'Eliminar';
  45.  fi.appendChild(ele);
  46.  
  47.  var container = document.getElementById('productos');
  48.  container.appendChild(container.firstChild.cloneNode(true));
  49.  
  50.  var clon = elemento.cloneNode(true);
  51.  clon.appendChild(ele);
  52. }
  53. function borrar(obj) {
  54.  fi = document.getElementById('productos');
  55.  fi.removeChild(document.parentNode);
  56. }
  57. -->
  58.  
  59. </head>
  60. <form method="post" action="#">
  61. <div><a title="Añadir otra fila" class="addlink" onclick="crear(this)">Añadir</a></div>
  62. <div id="productos"><p>
  63. <input type="text" value="" size="5" name="cantidad"/>
  64. <input type="text" value="" size="30" name="descripcion"/>
  65. <input type="text" value="" size="5" name="precio"/>
  66. <input type="text" value="" size="5" name="total"/></p>
  67. <div>
  68. </form>
  69. </body>
  70. </html>

Muchas gracias de antemano!
  #14 (permalink)  
Antiguo 09/12/2009, 01:29
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Crear y remover inputs

en rojo el codigo modificado. fijate lo que hace es simple: obtiene un clon de la fila, a ese clon le agrega el boton, y finalmente agrega el clon al elemento contenedor. en este caso asumo que lo agregarias al elemento contenedor porque de lo contrario no se que sentido tiene crear un DIV y agregarlo al DIV productos.
Código:
  ele.className = 'removelink';
  ele.innerHTML = 'Eliminar';
  
  var clone = fi.firstChild.cloneNode(true);
  clone.appendChild(ele);
  contenedor.appendChild(clone);

}
en todo caso, todavia tienes trabajo que hacer. ahora te toca ajustar la funcion de eliminar la fila.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #15 (permalink)  
Antiguo 09/12/2009, 16:29
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Crear y remover inputs

Cita:
Iniciado por zerokilled Ver Mensaje
en rojo el codigo modificado. fijate lo que hace es simple: obtiene un clon de la fila, a ese clon le agrega el boton, y finalmente agrega el clon al elemento contenedor. en este caso asumo que lo agregarias al elemento contenedor porque de lo contrario no se que sentido tiene crear un DIV y agregarlo al DIV productos.
Código:
  ele.className = 'removelink';
  ele.innerHTML = 'Eliminar';
  
  var clone = fi.firstChild.cloneNode(true);
  clone.appendChild(ele);
  contenedor.appendChild(clone);

}
en todo caso, todavia tienes trabajo que hacer. ahora te toca ajustar la funcion de eliminar la fila.
Tengo lo que me has dicho y he modificado el boton eliminar, ahora ya elimina correctamente. Pero salgo de una y caigo en otra.

¿Puede decirme porque sucede esto?

Nada más mostrar la página me aparece los 4 inputs y abajo el botón añadir (esto no está mal del todo, pero a diferencia del código del post (6 más abajo, donde consigo que funcione declarando cada input por separado)
Cuando pulso sobre Añadir, me los agrega debajo de este boton en lugar de arriba, por lo que queda raro raro, ademas la primera fila se queda sin botón "eliminar" :S:S:S

Si puedes ejecutar el código veras las paranoias que le dan...

Código javascript:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html>
  3. <head>
  4. <title>Crear input file - http://www.telefonica.net/web2/blas-mar/crear.html</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  6. <style>
  7. body, td, th, div, p {
  8. color:#000000;
  9. font-family:"Lucida Grande",Verdana,Arial,Helvetica,sans-serif;
  10. font-size:small;
  11. }
  12. input {
  13. margin:0.3em;
  14. }
  15. a.removelink {
  16. background:transparent url(delete.png) no-repeat scroll 4px 0;
  17. color:#999999;
  18. font-size:0.9em;
  19. padding:1px 0 1px 24px;
  20. text-decoration:none;
  21. }
  22. a.addlink {
  23. background:transparent url(add.png) no-repeat scroll left top;
  24. color:#999999;
  25. font-size:0.9em;
  26. padding:1px 0 1px 20px;
  27. text-decoration:none;
  28. cursor:pointer;
  29. }
  30. </style>
  31. <script type="text/javascript">
  32. <!--
  33. num=0;
  34. function crear(obj) {
  35.   num++;
  36.   fi = document.getElementById('productos');
  37.   contenedor = document.createElement('div');
  38.   contenedor.id = 'div'+num;
  39.   fi.appendChild(contenedor);
  40.  
  41.   // boton eliminar
  42.   ele = document.createElement('a');
  43.   ele.href = '#';
  44.   ele.name = 'div'+num;
  45.   ele.onclick = function () {borrar(this.name)}
  46.   ele.className = 'removelink';
  47.   ele.innerHTML = 'Eliminar';
  48.  
  49.   var clone = fi.firstChild.cloneNode(true);
  50.   clone.appendChild(ele);
  51.   contenedor.appendChild(clone);
  52. }
  53. function borrar(obj) {
  54.   fi = document.getElementById('productos');
  55.   fi.removeChild(document.getElementById(obj));
  56. }
  57. -->
  58. </script>
  59.  
  60. </head>
  61. <body>
  62. <form method="post" action="#">
  63. <div id="productos"><p>
  64. <input type="text" value="" size="5" name="cantidad"/>
  65. <input type="text" value="" size="30" name="descripcion"/>
  66. <input type="text" value="" size="5" name="precio"/>
  67. <input type="text" value="" size="5" name="total"/>
  68. </p>
  69. <a title="Añadir otra fila" class="addlink" onclick="crear(this)">Añadir</a></div>
  70. <div>
  71. <div>
  72. </form>
  73. </body>
  74. </html>

Muchas gracias de antemano!
  #16 (permalink)  
Antiguo 09/12/2009, 16:57
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Crear y remover inputs

ubica el boton de añadir fuera del DIV. es decir, justo despues del DIV que contiene las filas.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #17 (permalink)  
Antiguo 10/12/2009, 00:49
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Crear y remover inputs

Cita:
Iniciado por zerokilled Ver Mensaje
ubica el boton de añadir fuera del DIV. es decir, justo despues del DIV que contiene las filas.
Te refereias así? se comporta igual, el botón Añadir se queda arriba

Código html:
Ver original
  1. <form method="post" action="#">
  2. <div id="productos"><p>
  3. <input type="text" value="" size="5" name="cantidad"/>
  4. <input type="text" value="" size="30" name="descripcion"/>
  5. <input type="text" value="" size="5" name="precio"/>
  6. <input type="text" value="" size="5" name="total"/>
  7. </p><div>
  8. <div><a title="Añadir otra fila" class="addlink" onclick="crear(this)">Añadir</a></div>
  9. </form>

Muchas gracias de antemano!
  #18 (permalink)  
Antiguo 10/12/2009, 01:16
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Crear y remover inputs

asi es como yo lo intente,
Código:
<form method="post" action="#">
<div id="productos"><p> 
<input type="text" value="" size="5" name="cantidad"/>
<input type="text" value="" size="30" name="descripcion"/>
<input type="text" value="" size="5" name="precio"/>
<input type="text" value="" size="5" name="total"/>
</p>
</div>
<a title="Añadir otra fila" class="addlink" onclick="crear(this)">Añadir</a>
</form>
por cierto, me olvide mencionarte que la primera fila se queda sin boton eliminar porque simplemente no aparece en el codigo html. se lo tienes que agregar, pero si lo haces las nuevas filas terminarian con dos botones de eliminar. primero porque en la fila clonada ya existe el boton y segundo porque en la funcion para agregar nuevas filas le estas creando un boton.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #19 (permalink)  
Antiguo 10/12/2009, 17:06
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Crear y remover inputs

Cita:
Iniciado por zerokilled Ver Mensaje
asi es como yo lo intente,
Código:
<form method="post" action="#">
<div id="productos"><p> 
<input type="text" value="" size="5" name="cantidad"/>
<input type="text" value="" size="30" name="descripcion"/>
<input type="text" value="" size="5" name="precio"/>
<input type="text" value="" size="5" name="total"/>
</p>
</div>
<a title="Añadir otra fila" class="addlink" onclick="crear(this)">Añadir</a>
</form>
por cierto, me olvide mencionarte que la primera fila se queda sin boton eliminar porque simplemente no aparece en el codigo html. se lo tienes que agregar, pero si lo haces las nuevas filas terminarian con dos botones de eliminar. primero porque en la fila clonada ya existe el boton y segundo porque en la funcion para agregar nuevas filas le estas creando un boton.
Diossssssssss menudo quebradero de cabeza!!!! este tema me supera, utilizaré la forma larga pero efectiva. Ya que no consigo con tu técnica de clonar zerokilled que funcione igual que aquí.

Código javascript:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html>
  3. <head>
  4. <title>Crear y remover inputs</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  6. <style>
  7. body, td, th, div, p {
  8. color:#000000;
  9. font-family:"Lucida Grande",Verdana,Arial,Helvetica,sans-serif;
  10. font-size:small;
  11. }
  12. input {
  13. margin:0.3em;
  14. }
  15. a.removelink {
  16. background:transparent url(delete.png) no-repeat scroll 4px 0;
  17. color:#999999;
  18. font-size:0.9em;
  19. padding:1px 0 1px 24px;
  20. text-decoration:none;
  21. }
  22. a.addlink {
  23. background:transparent url(add.png) no-repeat scroll left top;
  24. color:#999999;
  25. font-size:0.9em;
  26. padding:1px 0 1px 20px;
  27. text-decoration:none;
  28. cursor:pointer;
  29. }
  30. </style>
  31. <script type="text/javascript">
  32. <!--
  33. num=0;
  34. function crear(obj) {
  35.   num++;
  36.   fi = document.getElementById('productos');
  37.   contenedor = document.createElement('div');
  38.   contenedor.id = 'div'+num;
  39.   fi.appendChild(contenedor);
  40.  
  41.   // primer input
  42.   ele = document.createElement('input');
  43.   ele.name = '_default_host[]';
  44.   ele.className = 'cajatexto';
  45.   ele.size = '5';
  46.   contenedor.appendChild(ele);
  47.  
  48.    // segundo input
  49.   ele = document.createElement('input');
  50.   ele.name = '_default_host[]';
  51.   ele.className = 'cajatexto';
  52.   ele.size = '30';
  53.   contenedor.appendChild(ele);
  54.  
  55.    // tercer input
  56.   ele = document.createElement('input');
  57.   ele.name = '_default_host[]';
  58.   ele.className = 'cajatexto';
  59.   ele.size = '5';
  60.   contenedor.appendChild(ele);
  61.  
  62.    // cuarto input
  63.   ele = document.createElement('input');
  64.   ele.name = '_default_host[]';
  65.   ele.className = 'cajatexto';
  66.   ele.size = '5';
  67.   contenedor.appendChild(ele);
  68.  
  69.   // boton eliminar
  70.   ele = document.createElement('a');
  71.   ele.href = '#';
  72.   ele.name = 'div'+num;
  73.   ele.onclick = function () {borrar(this.name)}
  74.   ele.className = 'removelink';
  75.   ele.innerHTML = 'Eliminar';
  76.   contenedor.appendChild(ele);
  77. }
  78. function borrar(obj) {
  79.   fi = document.getElementById('productos');
  80.   fi.removeChild(document.getElementById(obj));
  81. }
  82. -->
  83. </script>
  84.  
  85. </head>
  86. <body>
  87. <form method="post" action="#">
  88. <div id="productos"></div>
  89. <div><a title="Add another field" class="addlink" onclick="crear(this)">Añadir</a></div>
  90. </form>
  91. </body>
  92. </html>

Gracias de antemano!
  #20 (permalink)  
Antiguo 10/12/2009, 17:53
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Crear y remover inputs

lo mismo que tienes pero con cloneNode. de nuevo, la ventaja es evitarse tener que crear los elementos uno a uno, y por ende, simplificacion de codigo.
Código:
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml'><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Test Development</title>
<script type='text/javascript'>
self.onload = function(){
var product = document.getElementById("productos");
clone = product.firstChild.cloneNode(true);
// si no deseas eliminar la primera fila cuando cargue el documento,
// comenta o elimina la siguiente linea;
product.removeChild(product.firstChild);
}

function crear(){
document.getElementById("productos").appendChild(clone.cloneNode(true));
}

function borrar(elem){
var parent = elem.parentNode;
parent.parentNode.removeChild(parent);
}

</script>
<style type='text/css'>
span{
cursor:pointer;
}
</style>
</head>

<body><form>
<div id="productos"><p>
<input type="text" size="5" name="_default_host[]" />
<input type="text" size="30" name="_default_host[]" />
<input type="text" size="5" name="_default_host[]" />
<input type="text" size="5" name="_default_host[]" />
<span onclick="borrar(this)">Eliminar</span></p>
</div>
</form>
<span title="Añadir otra fila" class="addlink" onclick="crear()">Añadir</span>
</body></html>
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #21 (permalink)  
Antiguo 11/12/2009, 00:52
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Crear y remover inputs

Cita:
Iniciado por zerokilled Ver Mensaje
lo mismo que tienes pero con cloneNode. de nuevo, la ventaja es evitarse tener que crear los elementos uno a uno, y por ende, simplificacion de codigo.
Código:
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml'><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Test Development</title>
<script type='text/javascript'>
self.onload = function(){
var product = document.getElementById("productos");
clone = product.firstChild.cloneNode(true);
// si no deseas eliminar la primera fila cuando cargue el documento,
// comenta o elimina la siguiente linea;
product.removeChild(product.firstChild);
}

function crear(){
document.getElementById("productos").appendChild(clone.cloneNode(true));
}

function borrar(elem){
var parent = elem.parentNode;
parent.parentNode.removeChild(parent);
}

</script>
<style type='text/css'>
span{
cursor:pointer;
}
</style>
</head>

<body><form>
<div id="productos"><p>
<input type="text" size="5" name="_default_host[]" />
<input type="text" size="30" name="_default_host[]" />
<input type="text" size="5" name="_default_host[]" />
<input type="text" size="5" name="_default_host[]" />
<span onclick="borrar(this)">Eliminar</span></p>
</div>
</form>
<span title="Añadir otra fila" class="addlink" onclick="crear()">Añadir</span>
</body></html>
Mil gracias zerokilled
  #22 (permalink)  
Antiguo 11/12/2009, 15:28
 
Fecha de Ingreso: abril-2009
Mensajes: 8
Antigüedad: 15 años
Puntos: 0
Respuesta: Crear y remover inputs

me podrian prestar el codigo para guiarme el
<script type='text/javascript' src='module/handler.js'></script>
<script type='text/javascript' src='module/price.js'></script>
tengo todo pero lo que necesito es referenciar cada input por aparte para hacer operaciones
  #23 (permalink)  
Antiguo 11/12/2009, 15:46
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Crear y remover inputs

si no te explicas correctamente, nadie te puede ayudar. notese la siguiente linea en price.js, dicha linea es la que toma las referencias de los campos por fila.
Código:
var inputs = elem.parentNode.getElementsByTagName('input');
para referenciar cada una aparte, y por filas, tienes que indicar el indice segun la cantidad de campos. por ejemplo,
Código:
inputs[0] // primer campo;
inputs[1] // segundo campo;
inputs[2] // tercer campo;
// etc...
eso es lo basico, quizas necesites algo mas especifico pero tienes que explicarte. y sobre todo, si tienes algun codigo muestralo, asi el lector puede tener una idea mas clara. por ultimo, si tu tema no esta relacionado con este tema, deberias abrir un tema aparte y hacer referencia a este ubicando la URL en tu mensaje.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #24 (permalink)  
Antiguo 11/12/2009, 19:33
 
Fecha de Ingreso: abril-2009
Mensajes: 8
Antigüedad: 15 años
Puntos: 0
Respuesta: Crear y remover inputs

gracias por la pronta respuesta lo que necesito es por ejemplo que si escribo el codigo salga la descripcion ej:
document.getElementById(obj).value="descripcion" lo que me podrias ayudar es el (obj) como lo obtengo para hacer document.getElementById(obj).value="descripcion".

tambien cant=document.getElementById(obj).value
precio=document.getElementById(obj).value asi obtengo la cantidad y el precio pero si los elementos son diferentes, como los clone no se que id adquieren o como los referencio para manipularlos...

en el ejmplo que usted sita esta la respuesta pero necesito leer el codigo para entender un poco los scripts de estas referencias.. gracias de ante mano...
<script type='text/javascript' src='module/handler.js'></script>
<script type='text/javascript' src='module/price.js'></script>
  #25 (permalink)  
Antiguo 11/12/2009, 21:11
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Crear y remover inputs

honestamente no se por donde empezar contigo. se me esta quebrando la cabeza pensando que me tengo que volver a repetir bien extensamente detalles que he ido explicando en el transcurso que he estado en este foro. quizas lo tenga que hacer segun vaya descubriendo detalles acerca de ti.

en el ejemplo de price unit se utiliza getElementsByTagName el cual devuelve una coleccion de elementos y de ahi hago las referencia a los campos. en este caso no utiliza ID para los campos, de eso debes haberte fijado si miras el codigo fuente. por tanto, intentar hacerlo por getElementById simplemente no funcionara. no porque sea imposible realizarlo, sino porque el codigo carece de ese detalle.
Código:
<li><input type='text' class='desc' /> <input type='text' class='price' /> <input type='text'class='percentage' /> <input type='text' class='sell' readonly='readonly' /> <button type='button' value='remove'>Remove</button></li>
en el codigo, fijate que cada vez que aparece inputs va seguido de corchetes con un numero. cada una de esas ocurrencias son las referencia a los inputs de una fila en particular.
Código:
var inputs = elem.parentNode.getElementsByTagName('input');
var price = Number(inputs[1].value);
var sell = price / 100 * Number(inputs[2].value) + price;
if(!isNaN(sell))inputs[3].value = '$ ' + sell.toLocaleString();
¿como obtengo una fila en particular para obtener referencia de los campos?
en la aplicacion no le di importancia a ese detalle porque lo importante de ella es computar todos los datos disponibles segun la cantidad de fila. para ello sucede algo similar con los campos. con la funcion getElementsByTagName obtengo todas las filas disponibles.
Código:
var lists = document.getElementsByTagName('li');
lo pude haber hecho asignando un ID a cada fila y luego con la funcion getElementById obtener la referencia, pero al final hacerlo de esta forma requiere emular lo mismo que hace getElementsByTagName, en el sentido de tener un bucle para poder hacer referencia a cada fila. evitando esto me ahorro codigo y tiempo de analizacion.

en resumen, lo importante es que por ID no puedes obtener los campos porque simplemente los campos no tienen ID. al no tener ID, cuando se clonan tampoco tienen ID.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #26 (permalink)  
Antiguo 12/12/2009, 08:52
 
Fecha de Ingreso: abril-2009
Mensajes: 8
Antigüedad: 15 años
Puntos: 0
Respuesta: Crear y remover inputs

gracias ZeroKilled por sus respuestas... para que me conoscas soy Ing de Sistemas me dedico a desarrollar software para una empresa y me gusta hacer los desarrollos como me los imagino por esto me gusta adquirir informacion... ya cambiando de tema
en (price unit) esta lo que quiero hacer pero no se como ver el codigo fuente de los dos script que estan referenciados con javascript... gracias...
pero lo que me estas colaborando me ha servido de mucha ayuda gracias.....espero tener buena relacion con el foro gracias....
  #27 (permalink)  
Antiguo 12/12/2009, 09:49
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Crear y remover inputs

Cita:
Iniciado por morfeom Ver Mensaje
en (price unit) esta lo que quiero hacer pero no se como ver el codigo fuente de los dos script que estan referenciados con javascript... gracias...
Te referías a que no sabías ver estos códigos??

http://coffeescript.awardspace.com/p...odule/price.js
http://coffeescript.awardspace.com/p...ule/handler.js

Salu2!
  #28 (permalink)  
Antiguo 13/12/2009, 10:04
 
Fecha de Ingreso: abril-2009
Mensajes: 8
Antigüedad: 15 años
Puntos: 0
Respuesta: Crear y remover inputs

Gracias Neodani y Zerokilled veo que les gusta compartir informacion y son creativos cuenten con migo que en lo que les pueda colaborar ...gracias.. tienen algun proyecto o algo en lo que esten interactuando ...
  #29 (permalink)  
Antiguo 08/02/2010, 13:38
 
Fecha de Ingreso: abril-2009
Mensajes: 8
Antigüedad: 15 años
Puntos: 0
Respuesta: Crear y remover inputs

HOLA si alguien me puede ayudar con lo siguiente: necesito en my pagina php poder con un clik tomar una foto con la cama web y poder guardarla.. no se si sepueda con php pero lo que si se es que con un applet de Java si alguien tiene una idea espero su colaboracion...
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 02:02.