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