Foros del Web » Programando para Internet » Javascript »

Problema con una funcion DOM

Estas en el tema de Problema con una funcion DOM en el foro de Javascript en Foros del Web. Hola a todos, veran estoy haciendo un formulario dinamico mendiante DOM en el cual puedo ir añadiendo tablas con 2 select y un campo de ...
  #1 (permalink)  
Antiguo 01/05/2006, 09:27
 
Fecha de Ingreso: enero-2005
Mensajes: 115
Antigüedad: 19 años, 3 meses
Puntos: 1
Exclamación Problema con una funcion DOM

Hola a todos,
veran estoy haciendo un formulario dinamico mendiante DOM en el cual puedo ir añadiendo tablas con 2 select y un campo de texto, y ademas puedo ir quitandolas, pero tengo un problema con esta funcion:
Código:
function posicionar()
{
	var p=0;
	var cuantos=document.forms.formulario.posicion.length;
	if(cuantos==undefined)
	{
		document.forms.formulario.posicion.value=p;
	}
	else
	{
		for(var yy = 0;yy < document.forms.formulario.posicion.length;yy++)
		{	
			p=p+1;					
			document.forms.formulario.posicion[yy].value=p;
		//document.forms.formulario.txprecio[yy].focus();		
		//document.forms.formulario.posicion[yy].focus();
		//document.forms.formulario.txproducto[yy].focus();
		}
	}
}
Y esta es la funcion que llama a la anterior, y que uso para borrar:
Código:
function borraNodo(id)
{
	//alert(id);
	yo=document.getElementById(id); // el id es -> "borrado"+c
	yo.parentNode.removeChild(yo); //nos vamos atras para borrar el hijo del anterior, osea el actual
	posicionar();
}
La primera funcion se encarga de que cuando yo borro una fila de esa tabla creada dinamicamente se reorganicen el resto de las filas conteniendo una posicion valida. Bueno el problema es que esto funciona bien siempre que aun queden filas en la tabla lo que pasa es que si por ejemplo yo solo tengo una fila creada dinamicamente y le doy al boton de "borrar fila" en la linea del primer script : "var cuantos=document.forms.formulario.posicion.length; " me salta un error ya que claro no hay ninguna fila.
Como hago para controlar cuando no haya ninguna fila? (y asi no me salte ese error)
Gracias por vuestra colaboracion
__________________
SaRvErOk :ojotes:
  #2 (permalink)  
Antiguo 01/05/2006, 10:00
Avatar de Cap.Buscapina  
Fecha de Ingreso: octubre-2004
Ubicación: Argentina
Mensajes: 836
Antigüedad: 19 años, 6 meses
Puntos: 4
algunas dudas:

.-por que es necesario reorganizar la tabla?? (no basta simplemente borrar la fila)

.- el campo pisicion de tu formulario, es un select? un hidden? tenés muchos campos con el mismo nombre??

tal vez un poco de codigo (una versión reducida del que usas) vendría bien.


saludos
__________________
by Capitán Buscapina
.
  #3 (permalink)  
Antiguo 01/05/2006, 10:19
 
Fecha de Ingreso: enero-2005
Mensajes: 115
Antigüedad: 19 años, 3 meses
Puntos: 1
Exclamación

Aqui os dejo el script sin nada de php por en medio:

Código:
<script language="Javascript">
function cambia(oCntrl,index)
{
var c=0;
function suma(lugar)
{
var tabla = document.createElement("table"); //Tabla que contendra una regla
tabla.border="0";
tabla.width="434";
tabla.cellPadding="1";
tabla.cellSpacing="0";
tabla.id="borrado"+c; 

var cuerpo=document.createElement("tbody");
//declaramos la primera fila***************************************ojo	

var linea1=document.createElement("tr");
linea1.className="texforms";	
linea1.style.backgroundColor="#FFCC00";	//Color del encabezado de cada regla

var celda_1_1 = document.createElement("td");	
celda_1_1.width="19";
var contenido_1_1=document.createElement("input");
contenido_1_1.type="text";//declaramos el tipo de input text
contenido_1_1.name="posicion[]";
contenido_1_1.id="posicion";
contenido_1_1.size="3";
contenido_1_1.maxLength="3";
contenido_1_1.readOnly=true;
contenido_1_1.className="enumerarinsumo"
//fin de la celda 1 fila 1
//inicio celda 2 fila 1
var celda_1_2=document.createElement("td");
//celda_1_2.colSpan="3";
celda_1_2.width="71";
//declaramos el contenido de la celda 2 fila 1
var contenido_1_2=document.createTextNode(" ");/
//fin celda 2 fila1
//inicia celda 3 fila 1
var celda_1_3=document.createElement("td");
celda_1_3.width="288";
//declaramos el contenido de la celda 3 fila 1
var contenido_1_3=document.createTextNode(" ");
//fin celda 3 fila1
//declaramos otra celda la 4
var celda_1_4=document.createElement("td");
celda_1_4.width="26";//medida de esta celda
celda_1_4.align="center";
//declaramos un boton es para que la imagen este dentro de un button y tenga las funcionalidades de un boton 
var contenido_1_4A =document.createElement("button");
contenido_1_4A.name="delete";//le agreagamos el atributo name
contenido_1_4A.className="botondelinsumo";
contenido_1_4A.title="Eliminar Regla";
contenido_1_4A.alt="Eliminar Regla";
//aqui le asignamos un evento al boton
var nodotabla="borrado"+c;
contenido_1_4A.onclick = function(){borraNodo(nodotabla)};//esta funcion borra una tabla creada por este medio DOM
//declaramos el contenido de esta celda 3 fila 1
var contenido_1_4B=document.createElement("img");//aqui lo que voy a inserta es una imagen
contenido_1_4B.src="../imagenes/delete.gif";//declaro la ruta de la imagen
contenido_1_4B.border="0";//el atributo border de la imagen
contenido_1_4B.width="16";//el atributo ancho de la imagen
contenido_1_4B.height="16";//el atributo alto de la imagen
//fin celda 3

//finalmente se imprime todo
tabla.appendChild(cuerpo);//<tbody>	solo una vez se imprime*******************ojo

cuerpo.appendChild(linea1);//aqui se imprime la fila <tr>	
//aqui se imprime todo lo que contiene la fila
//celda 1
linea1.appendChild(celda_1_1);
celda_1_1.appendChild(contenido_1_1);
//celda 2
linea1.appendChild(celda_1_2);
celda_1_2.appendChild(contenido_1_2);
//celda 3
linea1.appendChild(celda_1_3);
celda_1_3.appendChild(contenido_1_3);
//celda 4
linea1.appendChild(celda_1_4);
celda_1_4.appendChild(contenido_1_4A);
contenido_1_4A.appendChild(contenido_1_4B);

//declaramos la segunda fila***************************************ojo
var linea2=document.createElement("tr");
//declaramos la 1 celda de la segunda fila
var celda_2_1 = document.createElement("td");	
//declaramos que contenido tendra esa celda contenido_fila_celda(fila 2 celda2)
var contenido_2_1=document.createTextNode(" ");
//fin celda 1 fila 2
//declaramos la 2 celda de la segunda fila
var celda_2_2 = document.createElement("td");	
celda_2_2.width="71";//medida de esta celda
celda_2_2.align="right";
celda_2_2.className="texto_menuizq";
//declaramos el contenido de la celda 2 fila 2
var contenido_2_2=document.createTextNode("Tipo: ");/
//fin celda 2 fila 2
//declaramos la 3 celda de la segunda fila
var celda_2_3=document.createElement("td");	
celda_2_3.align="left";
//celda_2_3.width="288";
//declaramos el contenido de la celda 3 fila 2
var contenido_2_3=document.createElement("select");	
contenido_2_3.name="lista_tipo[]";	
contenido_2_3.id="lista_tipo"+c;	
//Estas opciones se crearan dinamicamente mediante php y una consulta a la BD
contenido_2_3.options[0] = new Option('', '');
contenido_2_3.options[1] = new Option('ninguno', '1');
contenido_2_3.options[2] = new Option('album', '2');
contenido_2_3.options[3] = new Option('artista', '3');
contenido_2_3.options[4] = new Option('genero', '4');
contenido_2_3.options[5] = new Option('puntuacion', '5');
contenido_2_3.options[6] = new Option('compositor', '6');
contenido_2_3.options[7] = new Option('artista_original', '7'); 
contenido_2_3.className="areatx";
//fin celda 3 fila 2
//declaramos la 4 celda de la segunda fila
var celda_2_4 = document.createElement("td");	
celda_2_4.width="26";//medida de esta celda
var contenido_2_4=document.createTextNode(" ");
//fin celda 4

//finalmente se imprime todo
cuerpo.appendChild(linea2);
linea2.appendChild(celda_2_1);
celda_2_1.appendChild(contenido_2_1);
//celda 2 fila2
linea2.appendChild(celda_2_2);
celda_2_2.appendChild(contenido_2_2);
//celda 3 fila 2
linea2.appendChild(celda_2_3);
celda_2_3.appendChild(contenido_2_3);
//celda 4 fila 2
linea2.appendChild(celda_2_4);
celda_2_4.appendChild(contenido_2_4);
//declaramos la tercera fila****************************ojo
var linea3=document.createElement("tr");
//declaramos la 1 celda de la 3 fila
var celda_3_1 = document.createElement("td");	
var contenido_3_1=document.createTextNode(" ");
//fin celda 1 fila 3
//declaramos la 2 celda de la 3 fila
var celda_3_2 = document.createElement("td");	
celda_3_2.align="right";
celda_3_2.className="texto_menuizq";
//declaramos el contenido de la celda 2 fila 3
var contenido_3_2=document.createTextNode("Ámbito: ");
//fin celda 2 fila 3
//declaramos la 3 celda de la 3 fila
var celda_3_3=document.createElement("td");	
celda_3_3.align="left";
//declaramos el contenido de la celda 3 fila 3
var contenido_3_3=document.createElement("select");	
contenido_3_3.name="lista_ambito[]";	
contenido_3_3.id="lista_ambito"+c;
//contenido_3_3.options[0] = new Option('', '');
contenido_3_3.options[0] = new Option('', '');
contenido_3_3.options[1] = new Option('ninguno', '1');
contenido_3_3.options[2] = new Option('contiene', '2');
contenido_3_3.options[3] = new Option('no_contiene', '3'); 
contenido_3_3.options[4] = new Option('es', '4');
contenido_3_3.options[5] = new Option('no_es', '5');
contenido_3_3.options[6] = new Option('empieza_por', '6');  
contenido_3_3.options[7] = new Option('termina_por', '7');  
contenido_3_3.className="areatx";
//fin celda 3 fila 3
//declaramos la 4 celda de la fila 3
var celda_3_4 = document.createElement("td");	

var contenido_3_4=document.createTextNode(" ");
//fin celda 4

//finalmente se imprime todo
cuerpo.appendChild(linea3);
//celda 1 fila3
linea3.appendChild(celda_3_1);
celda_3_1.appendChild(contenido_3_1);
//celda 2 fila3
linea3.appendChild(celda_3_2);
celda_3_2.appendChild(contenido_3_2);/
//celda 3 fila 3
linea3.appendChild(celda_3_3);
celda_3_3.appendChild(contenido_3_3);
//celda 4 fila 2
linea3.appendChild(celda_3_4);/
celda_3_4.appendChild(contenido_3_4);
//declaramos la cuarta fila
var linea4=document.createElement("tr");
//declaramos la 1 celda de la 4 fila
var celda_4_1 = document.createElement("td");
var contenido_4_1=document.createTextNode(" ");
//fin celda 1 fila 4
//declaramos la 2 celda de la 4 fila
var celda_4_2 = document.createElement("td");	
celda_4_2.align="right";
celda_4_2.className="texto_menuizq";
//declaramos el contenido de la celda 2 fila 4
var contenido_4_2=document.createTextNode("Texto: ");
//fin celda 2 fila 4
//declaramos la 3 celda de la 4 fila
var celda_4_3=document.createElement("td");	
//declaramos el contenido de la celda 3 fila 4
var contenido_4_3=document.createElement("input");
contenido_4_3.type="text";
contenido_4_3.name="texto_regla"
contenido_4_3.id="texto_regla";
contenido_4_3.size="50";
//fin celda 3 fila 4
//declaramos la 4 celda de la segunda fila
var celda_4_4 = document.createElement("td");	

var contenido_4_4=document.createTextNode(" ");
//fin celda 4

//finalmente se imprime todo
cuerpo.appendChild(linea4);//aqui se imprime la 4 fila <tr>	
//celda 1 fila4
linea4.appendChild(celda_4_1);
celda_4_1.appendChild(contenido_4_1);
//celda 2 fila4
linea4.appendChild(celda_4_2);
celda_4_2.appendChild(contenido_4_2);
//celda 3 fila 4
linea4.appendChild(celda_4_3);/
celda_4_3.appendChild(contenido_4_3);
//celda 4 fila 4
linea4.appendChild(celda_4_4);
celda_4_4.appendChild(contenido_4_4);/

//esto siempre va al final
//si ya no hay nada mas que crear
//creamos todo el contenido
document.getElementById(lugar).appendChild(tabla);
c=c+1;
posicionar();
}

function borraNodo(id)
{
	//alert(id);
	yo=document.getElementById(id); // el id es -> "borrado"+c
	yo.parentNode.removeChild(yo); //nos vamos atras para borrar el hijo del anterior, osea el actual
	posicionar();
}

function posicionar()
{
	var p=0;
	var cuantos=document.forms.formulario.posicion.length;
	if(cuantos==undefined)
	{
		document.forms.formulario.posicion.value=p;
	}
	else
	{
		for(var yy = 0;yy < document.forms.formulario.posicion.length;yy++)
		{	
			p=p+1;					
			document.forms.formulario.posicion[yy].value=p;
		}
	}
	
}
</script>
__________________
SaRvErOk :ojotes:
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 10:10.