Foros del Web » Programando para Internet » Jquery »

Clonar ultima fila de una tabla con jquery

Estas en el tema de Clonar ultima fila de una tabla con jquery en el foro de Jquery en Foros del Web. Buenas, el caso es que tengo una tabla de este modo: Código HTML: <table id= "tabla" > <tr id= "t1" > <td> <input type= "text" ...
  #1 (permalink)  
Antiguo 27/10/2010, 05:55
 
Fecha de Ingreso: marzo-2006
Mensajes: 15
Antigüedad: 18 años, 1 mes
Puntos: 0
Clonar ultima fila de una tabla con jquery

Buenas,

el caso es que tengo una tabla de este modo:

Código HTML:
<table id="tabla">
  <tr id="t1">
     <td><input type="text" id="a1"></td>
     <td><input type="text" id="b1"></td>
     <td><input type="text" id="c1"></td>
     <td><input type="button" id="bt1"></td>
  </tr>
</table> 
Y querría clonar la última fila, pero con los campos vacíos y los ids incrementados quedando así sucesivamente:

Código HTML:
<table id="tabla">
  <tr id="t1">
     <td><input type="text" id="a1"></td>
     <td><input type="text" id="b1"></td>
     <td><input type="text" id="c1"></td>
     <td><input type="button" id="bt1" onClick="addField();"></td>
  </tr>
  <tr id="t2">
     <td><input type="text" id="a2"></td>
     <td><input type="text" id="b2"></td>
     <td><input type="text" id="c2"></td>
     <td><input type="button" id="bt2" onClick="addField();"></td>
  </tr>
</table> 
Hasta ahora he conseguido clonar la fila, pero no consigo acceder a los inputs para configurar sus ids y values:

Código:
        
function addField(){
       
      //Consigo el id actual      
      var clickID = $("#tabla tr:last").attr('id').replace('t','');               
                
      // Genero el nuevo numero id
      var newID = parseInt(clickID)+1;                               
                
      // Creo un clon del elemento tr que contiene los campos de texto
      fila = $("#tabla tr:last").clone(true);
                
      //Le asigno el nuevo numero id
      fila.attr("id",'t'+newID);      

      //AQUI SE ACCEDERÍA A LOS INPUTS PARA CAMBIAR IDS y VALORES
      //PERO NO LO CONSIGO, ESTO NO FUNCIONA:
      fila.children('td').eq(0).attr("id",'a'+newID).val('');
                                                         
       //Inserto nueva fila
       $("#topera").append(fila);                  
               
}
Como véis, clono la fila, solo que no consigo modificar los ids y valores de los inputs, por lo que se clonan exactos.

Esperando vuestra ayuda,
muchas gracias por adelantado.

PD: tengo que hacerlo con clone, no me sirven soluciones insertando todo el código html completo.
  #2 (permalink)  
Antiguo 27/10/2010, 14:21
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 4 meses
Puntos: 65
Respuesta: Clonar ultima fila de una tabla con jquery

porque queres modificar el id a la primer celda .children('td').eq(0)

¿para qué te sirve un id dinámico? si no sirven cuando creas estructuras fijas de forma dinámica

Código HTML:
Ver original
  1.     <title>Pruebas</title>
  2. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  3. $(function(){
  4.  
  5.     tabla = $('#tabla');
  6.     tr = $('tr:first', tabla);
  7.     $('#agregarFila').live('click', function (){
  8.         tr.clone().appendTo(tabla).find(':text').val('');
  9.     });
  10.  
  11.     $(".eliminarFila").live('click', function (){
  12.         $(this).closest('tr').remove();
  13.     });
  14.  
  15. });
  16. </head>
  17.  
  18.    
  19.     <table id="tabla">
  20.         <tr>
  21.             <td><input type="text" name="nombre"></td>
  22.             <td><input type="text" name="apellido"></td>
  23.             <td><input type="text" name="mail"></td>
  24.             <td><input type="button" value="Eliminar" class="eliminarFila"></td>
  25.         </tr>
  26.     </table>
  27.  
  28. <input type="button" value="Agregar" id="agregarFila">
  29.  
  30. </body>
  31. </html>

Última edición por Dany_s; 27/10/2010 a las 14:28
  #3 (permalink)  
Antiguo 28/10/2010, 03:50
 
Fecha de Ingreso: marzo-2006
Mensajes: 15
Antigüedad: 18 años, 1 mes
Puntos: 0
Respuesta: Clonar ultima fila de una tabla con jquery

El tema de los ids dinámicos es para que a la hora de enviar el formulario para ser registrado en la bd pueda identificar los campos, porque según tu ejemplo, ¿como identificas los nuevos campos si se llaman igual que los ya existentes a la hora de hacer el post?

Ese es mi problema realmente.

Esperando ayuda de nuevo, gracias.
  #4 (permalink)  
Antiguo 28/10/2010, 12:08
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 4 meses
Puntos: 65
Respuesta: Clonar ultima fila de una tabla con jquery

el id de un elemento html no tiene nada que ver con un id de la base de datos, al enviar un formulario no se envia el id de input sino que se envia el valor del input

Cita:
¿como identificas los nuevos campos si se llaman igual que los ya existentes a la hora de hacer el post?
no entendi, supongo que decis para identificar el atributo name?

lo envias como array, en el name usas los corchetes []
name="nombre[]"
name="nombre[]"

si decis que cuando se entra al form se carga con datos de la bd y esos queres distinguir con los nuevos usa un campo oculto con los id (id de bd), cuando envias sabes que si el campo que contiene el id esta vacio quiere decir que es nuevo, si tiene id ya existe (podes usar para modificar), asi lo mismo podes usar para eliminar, cuando dan click en eliminar fijate si hay algo en el campo de la id, si no hay nada borrar solo de la pantalla pero si tiene borras de la pantalla y de la bd



algo como esto, supone que el primer registro que tiene lo trajiste de la bd, tiene en el input hidden id 1
Código PHP:
Ver original
  1. <html>
  2. <head>
  3.     <title>Pruebas</title>
  4. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  5. <script>
  6. $(function(){
  7.  
  8.     tabla = $('#tabla');
  9.     tr = $('tr:first', tabla);
  10.     $('#agregarFila').live('click', function (){
  11.         tr.clone().appendTo(tabla).find(':text, :hidden').val('');
  12.     });
  13.  
  14.     $(".eliminarFila").live('click', function (){
  15.         var tr = $(this).closest('tr')
  16.         if ( $('[name=id[]]', tr).val() )
  17.             alert("Elimino de la bd con ajax");
  18.         tr.remove();
  19.     });
  20.  
  21. });
  22. </script>
  23. </head>
  24.  
  25. <?php
  26. if (!empty($_GET)){
  27.     $id = $_GET['id'];
  28.     $nombre = $_GET['nombre'];
  29.     foreach ($id as $k => $value) {
  30.         echo "<br />";
  31.         if ($id[$k]){
  32.             echo "El registro " . $id[$k] . " " . $nombre[$k] . " existe.";
  33.         } else {
  34.             echo "El registro " . $nombre[$k] . "  <b>no existe</b>.";
  35.         }
  36.     }
  37. }
  38. ?>
  39.  
  40. <body>
  41.  
  42.     <form action="">
  43.         <table id="tabla">
  44.             <tr>
  45.                 <td><input type="hidden" name="id[]" value="1"></td>
  46.                 <td><input type="text" name="nombre[]" value="nombre1"></td>
  47.                 <td><input type="text" name="apellido[]" value="apellido1"></td>
  48.                 <td><input type="text" name="mail[]" value="email1"></td>
  49.                 <td><input type="button" value="Eliminar" class="eliminarFila"></td>
  50.             </tr>
  51.         </table>
  52.         <input type="button" value="Agregar" id="agregarFila">
  53.         <input type="submit" value="Enviar datos"/>
  54.     </form>
  55.  
  56.  
  57.  
  58. </body>
  59. </html>
  #5 (permalink)  
Antiguo 28/10/2010, 14:05
 
Fecha de Ingreso: enero-2008
Ubicación: Buenos Aires
Mensajes: 305
Antigüedad: 16 años, 3 meses
Puntos: 14
Respuesta: Clonar ultima fila de una tabla con jquery

Dany_s,

Esto:
Código Javascript:
Ver original
  1. tabla = $('#tabla');
  2. tr = $('tr:first', tabla);

Es lo mismo que:
Código Javascript:
Ver original
  1. tr = $('#tabla tr:first');

Documentación?, desconocía esta forma.
  #6 (permalink)  
Antiguo 28/10/2010, 19:56
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 4 meses
Puntos: 65
Respuesta: Clonar ultima fila de una tabla con jquery

si lo mismo pero me parece mas legible y mas usando variables

$(selector, contexto)

"selector" selecciona en lo que hay dentro del "contexto"
http://api.jquery.com/jQuery/

sino tabla.find('tr:first');

varias formas

como el :first que es igual :eq(0)


de rendimiento no sé jeje nunca tuve html gigantes
  #7 (permalink)  
Antiguo 29/10/2010, 01:34
 
Fecha de Ingreso: marzo-2006
Mensajes: 15
Antigüedad: 18 años, 1 mes
Puntos: 0
Respuesta: Clonar ultima fila de una tabla con jquery

Hola Dany_s, gracias de nuevo pero creo que no me he explicado bien.

Voy a usar tu ejemplo a ver si así puedo dejarlo más claro.

Supongamos que el formulario para introducir clientes es este:

Código HTML:
<table id="tabla">

        <tr>
            <td><input type="text" name="nombre"></td>
            <td><input type="text" name="apellido"></td>
            <td><input type="text" name="mail"></td>
            <td><input type="button" value="Eliminar" class="eliminarFila"></td>
        </tr>

</table> 
Tras ir clonando filas según tu código jquery, el formulario quedaría así:

[HTML]
Código HTML:
<table id="tabla">

        <tr>
            <td><input type="text" name="nombre"></td>
            <td><input type="text" name="apellido"></td>
            <td><input type="text" name="mail"></td>
            <td><input type="button" value="Eliminar" class="eliminarFila"></td>
        </tr>
        <tr>
            <td><input type="text" name="nombre"></td>
            <td><input type="text" name="apellido"></td>
            <td><input type="text" name="mail"></td>
            <td><input type="button" value="Eliminar" class="eliminarFila"></td>
        </tr>
        <tr>
            <td><input type="text" name="nombre"></td>
            <td><input type="text" name="apellido"></td>
            <td><input type="text" name="mail"></td>
            <td><input type="button" value="Eliminar" class="eliminarFila"></td>
        </tr>
         .
         .
         .
</table> 
Ahora llega el momento de hacer el post, y enviar los datos recogidos en el form a la bd. ¿Cómo hago para reconocer los distintos clientes si todos los "names" de los "inputs" son iguales? Por eso intentaba cambiar los ids o names cada vez que clonaba una fila, e ir incrementándolos.

¿Entiendes ahora mi cuestión?
Quiero hacer un post completo, no me sirve enviar cada cliente a la bd cada vez que clono una fila.

Me propones usar arrays, nombre[], pero entiendo que se machacarían los valores igualmente, ¿o no?

Esperando de nuevo tu ayuda.
  #8 (permalink)  
Antiguo 29/10/2010, 12:52
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 4 meses
Puntos: 65
Respuesta: Clonar ultima fila de una tabla con jquery

no, fijate el ejemplo que puse, ahi recorre los campos

en php vas a tener

nombre[] = "uno"
nombre[] = "dos"
nombre[] = "tres"
nombre[] = "cuatro"

fijate haciendo
var_dump($_GET['nombre'])

Etiquetas: clonar, fila, tablas, ultimo
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 07:17.