Foros del Web » Programando para Internet » Jquery »

Añadiendo filas a una tabla usando jquery

Estas en el tema de Añadiendo filas a una tabla usando jquery en el foro de Jquery en Foros del Web. Buenas, estoy medio empezando con este mundillo de jquery y tengo una duda a ver si me podéis ayudar. Tengo una página php que tiene ...
  #1 (permalink)  
Antiguo 22/11/2011, 09:58
 
Fecha de Ingreso: noviembre-2011
Mensajes: 1
Antigüedad: 12 años, 5 meses
Puntos: 0
Añadiendo filas a una tabla usando jquery

Buenas, estoy medio empezando con este mundillo de jquery y tengo una duda a ver si me podéis ayudar.

Tengo una página php que tiene unos inputs text para meter nuevos elementos en la tabla y una tabla generada haciendo una consulta a la bbdd:

index.php:
Código PHP:
<?php 

<label for="texto_visible">Texto visible:</label><input id="texto_visible" name="texto_visible" type="input" size="35" /><br/>
<
label for="url">Url:</label><input id="url" name="url" type="input" size="60" /><br/>
<
label for="orden">Orden:</label><input id="orden" name="orden" type="input" size="1" />
<
input id="anadir" name="anadir" type="submit" value="Añadir" />

<
table class="tabla">
    <
thead>
        <
tr>
            <
td>Texto visible</td>
            <
td>Url</td>
            <
td>Orden</td>
        </
tr>
    </
thead>
    <
tbody id="table_body">
        <?
php require_once("connection.php");    

        
$db_connection = new connection();

        
$db_connection->query("select * 
                               from menu 
                               order by orden asc"
);

        
$dataset $db_connection->result();

        while(
$row mysql_fetch_array($dataset))
        {
            
$id            $row[0];
            
$texto_visible $row[1];
            
$url           $row[2];
            
$orden         $row[3];

        
?>
            <tr id="row_<?php echo $id?>" class="edit_tr">

                <td>
                    <span id="first_<?php echo $id?>" class="text"><?php echo $texto_visible?></span>
                    <input type="textarea" value="<?php echo $texto_visible?>" class="editbox" id="first_input_<?php echo $id?>" ></input>
                </td>

                <td>
                    <span id="second_<?php echo $id?>" class="text"><?php echo $url?></span>
                    <input type="text" value="<?php echo $url?>" class="editbox" id="second_input_<?php echo $id?>"></input>
                </td>

                <td class="edit_td short">
                    <span id="last_<?php echo $id?>" class="text"><?php echo $orden?></span>
                    <input type="text" value="<?php echo $orden?>" class="editbox" id="last_input_<?php echo $id?>"></input>
                </td>

                <td id="edit_<?php echo $id?>" class="edit_button">
                    <img src="edit.png" title="Editar" alt="Editar"></img>
                </td>

                <td id="delete_<?php echo $id?>" class="delete_button">
                    <img src="delete.png" title="Borrar" alt="Borrar"></img>
                </td>

                <td id="accept_<?php echo $id?>" class="accept_button">
                    <img src="accept.png" title="Aceptar" alt="Aceptar"></img>
                </td>

                <td id="cancel_<?php echo $id?>" class="cancel_button">
                    <img src="cancel.png" title="Cancelar" alt="Cancelar"></img>
                </td>
            </tr>

    <?php
        
}
    
?>

    </tbody>
    <tfoot>
        <tr >
            <td id="<?php echo $id?>" class="add_button">
                <img src="insert.png" title="Añadir" alt="Añadir"></img>
            </td>
        </tr>
    </tfoot>
</table>
?>
Después tengo un javascript que tiene lo siguiente:
index_events.js
Código:
$(document).ready(function()
{ 

	// Los "botones" para editar filas
	$('.edit_button').click(function()
	{
		var id = $(this).attr('id');
		var number = id.split('_')[1];
		
		$('#first_' + number).hide();
		$('#second_' + number).hide();
		$('#last_' + number).hide();

		$('#first_input_' + number).show();
		$('#second_input_' + number).show();
		$('#last_input_' + number).show();
		
		$('#cancel_' + number).show();
		$('#accept_' + number).show();
		$('#edit_' + number).hide();
		$('#delete_' + number).hide();
		
	});

	// Botóon para añadir una fila a la tabla
	$('#anadir').click(function()
	{
		var texto_visible = $('#texto_visible').val();
		var url = $('#url').val();
		var orden = $('#orden').val();

		var dataString = 'texto_visible=' + texto_visible + '&url=' + url + '&orden=' + orden;

		$.ajax({
			type: 'POST',
			url: 'insert.php',
			data: dataString,
			cache: false,
			success: function(html)
			{
				$('#table_body').append(html);
			},
			error: function(jqXHR, textStatus, errorThrown)
			{
				alert(textStatus)
				alert(errorThrown);
			}
		});
		
	});
});
Y por último el fichero insert.php que tiene:
Código PHP:
<?php require_once("connection.php");

if (isset(
$_POST['texto_visible']) && isset($_POST['url']) && isset($_POST['orden']))
{
    
$texto_visible mysql_escape_String($_POST['texto_visible']);
    
$url mysql_escape_String($_POST['url']);
    
$orden mysql_escape_String($_POST['orden']);
    
    
$db_connection = new connection();
    
    
$query "select max(id) from menu";
    
    
$db_connection->query($query);
    
    
$dataset_id $db_connection->result();
    
    
$row mysql_fetch_row($dataset_id);
    
    
$id $row[0] + 1;

    
$query "insert into menu (id, texto_visible, url, orden) values ($id, '$texto_visible', '$url', $orden)";
    
    
$db_connection->query($query);
    
    if (
$db_connection->error() != "")
    {
        echo 
'Error al insertar:'.$db_connection->error();
    }
    else
    {
    
?>
    
    <tr id="row_<?php echo $id?>"class="edit_tr">

        <td>
            <span id="first_<?php echo $id?>" class="text"><?php echo $texto_visible?></span>
            <input type="textarea" value="<?php echo $texto_visible?>" class="editbox" id="first_input_<?php echo $id?>" ></input>
        </td>

        <td>
            <span id="second_<?php echo $id?>" class="text"><?php echo $url?></span>
            <input type="text" value="<?php echo $url?>" class="editbox" id="second_input_<?php echo $id?>"></input>
        </td>

        <td>
            <span id="last_<?php echo $id?>" class="text"><?php echo $orden?></span>
            <input type="text" value="<?php echo $orden?>" class="editbox" id="last_input_<?php echo $id?>"></input>
        </td>

        <td id="edit_<?php echo $id?>" class="edit_button">
            <img src="edit.png" title="Editar" alt="Editar"></img>
        </td>

        <td id="delete_<?php echo $id?>" class="delete_button">
            <img src="delete.png" title="Borrar" alt="Borrar"></img>
        </td>

        <td id="accept_<?php echo $id?>" class="accept_button">
            <img src="accept.png" title="Insertar" alt="Insertar"></img>
        </td>

        <td id="cancel_<?php echo $id?>" class="cancel_button">
            <img src="cancel.png" title="Cancelar" alt="Cancelar"></img>
        </td>
    </tr>
<?php
    
}
}

?>
La cosa funciona como sigue:
Cuando cargo index.php, todos los botones cuya clase es "edit_button" son totalmente funcionales.
Si relleno los input text y le doy al botón "Añadir", dibuja la nueva fila mediante ajax al final de la tabla.
El problema es, que el botón para editar de esa nueva fila parece estar inactivo y no encuentro la manera de que funcione como los que ya hay "dibujados" anteriormente en index.php
¿Alguien puede decirme por qué ocurre esto o cómo se soluciona? Parece como si no pudiese reconocer cosas que han sido creadas después de la carga de la página.

Un saludo a todos
  #2 (permalink)  
Antiguo 30/11/2011, 16:31
 
Fecha de Ingreso: julio-2003
Ubicación: Cochabamba Bolivia
Mensajes: 300
Antigüedad: 20 años, 9 meses
Puntos: 14
Respuesta: Añadiendo filas a una tabla usando jquery

Hola.

Tienes que usar live para que los nuevos elementos cargados en el dom tengan su funcion correpondiente, algo asi:

Es decir reemplaza la line de tu codigo javascript 'click' por esta otra:

Código Javascript:
Ver original
  1. $( '.edit_button' ).live( 'click', function(){} );

Saludos.
__________________
:policia: Uno para todos y todos para uno.

Etiquetas: tablas
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 21:44.