Foros del Web » Programando para Internet » Javascript »

Solución añadir select dinámicamente

Estas en el tema de Solución añadir select dinámicamente en el foro de Javascript en Foros del Web. Hola a todos, he estado trabajando un poquillo y al final he conseguido añadir a un formulario tantos combobox como indique un valor seleccionable. Para ...
  #1 (permalink)  
Antiguo 20/03/2007, 15:42
 
Fecha de Ingreso: julio-2004
Mensajes: 117
Antigüedad: 19 años, 10 meses
Puntos: 0
Solución añadir select dinámicamente

Hola a todos, he estado trabajando un poquillo y al final he conseguido añadir a un formulario tantos combobox como indique un valor seleccionable. Para ello he manejado el DOM de HTML con javascript y lo he probado tanto en IE7 como en Firefox.

Pongo el código por si le sirve de ayuda a alguien. Imagino que con pocos cambios sirva para añadir cualquier tipo de elemento.

Saludos

Código:
<html>
<head>
<meta http-equiv="Content-Language" content="es">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta Author=IR>
<title>Número de Revisores</title>
<SCRIPT LANGUAGE="JavaScript">
<!--//

function addSelect(){
	var num_select=document.revisores.num_rev.value; //obtengo el valor del select
	
	var select = document.getElementsByTagName("select");
	var select_actuales = select.length -1; //numero de select ya añadidos
	//resto 1 porque el select[0] es el que muestra los numeros y no lo voy a contar

	if (select_actuales < num_select){
		//añado tantos select como me indique el numero menos los que tengo añadidos ya
		var poner = (num_select - select_actuales);
		num_nombre=select_actuales+1; //para poner el numero del revisor al select
		
		for (var i=0; i<poner; i++){
			var nuevoSelect = document.createElement("select"); //creo el nodo del select
			
			//elijo nombres correlativos para lo select para diferenciarlos
			nombre_select="select"+num_nombre;
			num_nombre++;
			
			nuevoSelect.setAttribute("name", nombre_select); //añado el nombre al select
			var nuevoOption = document.createElement("option"); //creo el nodo option
			
			//por ejemplo voy a meter solo 1 valor al select
			var nodoTextoOption = document.createTextNode("opcion 1"); //creo un nodo texto para el option
			nuevoOption.appendChild(nodoTextoOption); //añado el nodo texto al nodo option
			nuevoSelect.appendChild(nuevoOption); //añado el nodo option al nodo select
			
			var cuerpoRef = document.getElementsByTagName("body")[0]; //saco el nodo en el que quiero colgarlo
			cuerpoRef.appendChild(nuevoSelect); //engancho el nodo creado al padre
			
		}
	}else{
		//el valor del número es menor que el número de select que tengo puestos, hay que eliminar nodos
		var j = select_actuales - (select_actuales - num_select); // j es el nodo en el que hay que parar de eliminar
		
		//elimino hijos a partir del último hasta quedarme con el numero seleccionado
		for (var i=select_actuales; i>j; i--){
			var select = document.getElementsByTagName("select")[i]; //selecciono el nodo final
			var padre = select.parentNode; //busco el padre del nodo final
			var hijo_borrado = padre.removeChild(select); //elimino el nodo final
		}
	}

	select_actuales=i; //almacena el numero de revisores puestos
}

//-->

</SCRIPT>
</head>

<body>
<form name='revisores' METHOD=POST ACTION="">
	<p>Selecciona el número de Select 
	<p><select size='1' name='num_rev' onchange='addSelect()'>
		<option value='1'> 1 </option>
		<option value='2'> 2 </option>
		<option value='3'> 3 </option>
		<option value='4'> 4 </option>
		<option value='5'> 5 </option>
		<option value='6'> 6 </option>
	   </select>
	</p>
	</p>

</form>
</body>
</html>
  #2 (permalink)  
Antiguo 20/03/2007, 16:16
 
Fecha de Ingreso: diciembre-2004
Mensajes: 37
Antigüedad: 19 años, 4 meses
Puntos: 0
Re: Solución añadir select dinámicamente

te quedo muy bien.. codigo simplificado.. muy facil de entender..


Gracias!!
  #3 (permalink)  
Antiguo 20/03/2007, 20:00
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
Puntos: 35
Re: Solución añadir select dinámicamente

loading...........


creo que asi se veria mejor para analizarlo AL VUELO

Código PHP:
<html>
<
head>
<
meta http-equiv="Content-Language" content="es">
<
meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<
meta Author=IR>
<
title>N&#250;mero de Revisores</title>
<SCRIPT LANGUAGE="JavaScript">

function 
addSelect(){
    var 
num_select=document.revisores.num_rev.value//obtengo el valor del select
    
    
var select document.getElementsByTagName("select");
    var 
select_actuales select.length -1//numero de select ya añadidos
    //resto 1 porque el select[0] es el que muestra los numeros y no lo voy a contar

    
if (select_actuales num_select){
        
//añado tantos select como me indique el numero menos los que tengo añadidos ya
        
var poner = (num_select select_actuales);
        
num_nombre=select_actuales+1//para poner el numero del revisor al select
        
        
for (var i=0i<poneri++){
            var 
nuevoSelect document.createElement("select"); //creo el nodo del select
            
            //elijo nombres correlativos para lo select para diferenciarlos
            
nombre_select="select"+num_nombre;
            
num_nombre++;
            
            
nuevoSelect.setAttribute("name"nombre_select); //añado el nombre al select
            
var nuevoOption document.createElement("option"); //creo el nodo option
            
            //por ejemplo voy a meter solo 1 valor al select
            
var nodoTextoOption document.createTextNode("opcion 1"); //creo un nodo texto para el option
            
nuevoOption.appendChild(nodoTextoOption); //añado el nodo texto al nodo option
            
nuevoSelect.appendChild(nuevoOption); //añado el nodo option al nodo select
            
            
var cuerpoRef document.getElementsByTagName("body")[0]; //saco el nodo en el que quiero colgarlo
            
cuerpoRef.appendChild(nuevoSelect); //engancho el nodo creado al padre
            
        
}
    }else{
        
//el valor del número es menor que el número de select que tengo puestos, hay que eliminar nodos
        
var select_actuales - (select_actuales num_select); // j es el nodo en el que hay que parar de eliminar
        
        //elimino hijos a partir del último hasta quedarme con el numero seleccionado
        
for (var i=select_actualesi>ji--){
            var 
select document.getElementsByTagName("select")[i]; //selecciono el nodo final
            
var padre select.parentNode//busco el padre del nodo final
            
var hijo_borrado padre.removeChild(select); //elimino el nodo final
        
}
    }

    
select_actuales=i//almacena el numero de revisores puestos
}

</SCRIPT>
</head>

<body>
<form name='revisores' METHOD=POST ACTION="">
    <p>Selecciona el número de Select 
    <p><select size='1' name='num_rev' onchange='addSelect()'>
        <option value='1'> 1 </option>
        <option value='2'> 2 </option>
        <option value='3'> 3 </option>
        <option value='4'> 4 </option>
        <option value='5'> 5 </option>
        <option value='6'> 6 </option>
       </select>
    </p>
    </p>

</form>
</body>
</html> 


connection closed.
__________________

Maborak Technologies
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 05:59.