Foros del Web » Programando para Internet » Javascript »

Botón para eliminar contenido dinámicamente no va bien

Estas en el tema de Botón para eliminar contenido dinámicamente no va bien en el foro de Javascript en Foros del Web. Hola, he hecho un script que crea dinámicamente una tabla en base a las filas y columnas introducidas por el usuario. El problema es que ...
  #1 (permalink)  
Antiguo 20/07/2007, 06:33
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 6 meses
Puntos: 3
Botón para eliminar contenido dinámicamente no va bien

Hola,

he hecho un script que crea dinámicamente una tabla en base a las filas y columnas introducidas por el usuario. El problema es que cuando creo la tabla, también creo seguidamente un form con un botón que me debería dinámicamente eliminar esa tabla. Y eliminarla la elimina, pero sin esperar a que pulse el botón que desencadene el evento.

Aquí teneis el código entero por si quereis comprobarlo vosotros mismos

Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Crear tabla y eliminar con DOM</title>
<script type="text/javascript">

function crear_tabla(miForm) {
	// Obtener datos introducidos en campos de texto
	var nFilas = miForm.numFilas.value;
	var nCols = miForm.numCols.value;
	
	// Obtener la referencia donde se encuentra el bloque <div> que contendrá la tabla, y form/botón para eliminarla posteriormente
	var lugar = document.getElementById("contenedorTabla");
	
	// Crear la tabla, y anexarla al árbol del documento como hijo del elemento <div> contenedorTabla
	var miTabla = document.createElement("table");
	lugar.appendChild(miTabla);
	
	// Poblar tabla
	// Crear <tbody> y añadirla como hijo de <table>
	var miTbody = document.createElement("tbody");
	miTabla.appendChild(miTbody);
	
	// Bucle externo para las filas <tr>
	for (var i = 0; i < nFilas; i++) {
		// Crear elemento <tr> y añadirlo como hijo de <tbody>
		var mi_tr = document.createElement("tr");
		miTbody.appendChild(mi_tr);
		
		// Bucle interno para las columnas de cada fila
		for (var j=0; j < nCols; j++) {
			// Crear <td> y anexarlo como hijo del <td> actual
			var mi_td = document.createElement("td");
			mi_tr.appendChild(mi_td);
			
			// Crear el nodo de texto hijo del elemento <td> actual
			var miTexto = document.createTextNode("Fila " + i + " Col " + j);
			mi_td.appendChild(miTexto);
		}
	}
	
	// Crear un borde de tabla de 1
	miTabla.border = 1;
	
	// Cambiar el texto de presentación de la tabla
	document.getElementById("presentacionTabla").firstChild.nodeValue = "Aquí tiene la tabla construida: ";
	
	// Asignar un id a la nueva tabla para poder editarla dinámicamente en el futuro
	miTbody.id = "cuerpoTabla";
	
	// Crear un formulario con botón para destruir la tabla creada
	var formEliminar = document.createElement("form");
	lugar.appendChild(formEliminar);
	
	// Crear boton para eliminar
	var botonEliminar = document.createElement("input");
	botonEliminar.type = "button";
	botonEliminar.value = "Eliminar la tabla";
	formEliminar.appendChild(botonEliminar);
	botonEliminar.onClick = eliminar_tabla(miTabla); // Probé tratando este evento como si se tratase de otro atributo (poniendo el contenido entre comillas) pero no funcionaba, y así se ejecuta la llamada pero sin esperar al evento onClick
}

function eliminar_tabla(tablaActual) {
	alert("Eliminando tabla...");
        // Eliminar tabla desde propia tabla
	tablaActual.parentNode.removeChild(tablaActual);
        // Eliminar formulario de eliminar desde nodo padre
        lugar.removeChild(formEliminar);
}
</script>
</head>

<body>
<p>Introduce el número de filas y columnas para crear la tabla:</p>
<form id="formulario" name="form1" method="post" action="javascript:void(0)">
  <p>Filas: 
    <input name="numFilas" type="text" id="numFilas" size="4" />
&nbsp;&nbsp;x&nbsp;&nbsp;Columnas:
<input name="numCols" type="text" id="numCols" size="4" />
  </p>
  <p>
    <input type="submit" name="boton" id="boton" value="Enviar" onclick="crear_tabla(this.form)"/>
</p>
</form>
<p id="presentacionTabla">La tabla aparecerá aquí:</p>

<div id="contenedorTabla"></div>
</body>
</html> 
  #2 (permalink)  
Antiguo 20/07/2007, 08:40
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Re: Botón para eliminar contenido dinámicamente no va bien

Hola:

Prueba así:

botonEliminar.onClick = function() {eliminar_tabla('miTabla'); }

... en la creación de esa tabla ponle el id="miTabla"...

Y en el botón de eliminar:

function eliminar_tabla(cual) {
yo = document.getElementById(cual);
yo.parentNode.removeChild(yo);
}

Algo que te falla es que usas variables creadas dentro de una función en otra... si las declaras fuera de una función las conviertes en "globales" y dentro de la función debes usarlas sin el "var"... ese problemas lo tienes al eliminar el objeto lugar... esa parte intenta corregirla tú

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 20/07/2007, 11:40
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 6 meses
Puntos: 3
Re: Botón para eliminar contenido dinámicamente no va bien

Hola Caricatos! Gracias por tu respuesta.
Tienes razón con lo de las variables lugar y formEliminar. Las había creado localmente a la primera función y luego no podía usarlas en la otra.

Aparte de eso, he intentado lo de la línea de código

botonEliminar.onClick = function() {eliminar_tabla('miTabla'); }

pero tampoco sale. Ahora no responde en absoluto. Y eso que anteriormente le he asignado al elemento <table> el id:

miTabla.id = "miTabla";

Lo has probado tu y te funciona?
  #4 (permalink)  
Antiguo 21/07/2007, 08:13
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Re: Botón para eliminar contenido dinámicamente no va bien

Hola:

El problema del copy and paste es que pueden pasarse cosas...

onclick es con todas las letras minúsculas... (Es lo único que veo mal...)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 21/07/2007, 09:02
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 6 meses
Puntos: 3
Re: Botón para eliminar contenido dinámicamente no va bien

ok, ahora sí. Muchas gracias!
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 18:46.