Foros del Web » Programando para Internet » Javascript »

hacer varios select (combobox)

Estas en el tema de hacer varios select (combobox) en el foro de Javascript en Foros del Web. Buenas, tengo echo un códigoq ue loq ue quiero que haga es que cuando elija algo del select se me cree un nuevo select con ...
  #1 (permalink)  
Antiguo 28/10/2011, 09:26
 
Fecha de Ingreso: junio-2011
Mensajes: 151
Antigüedad: 12 años, 10 meses
Puntos: 2
hacer varios select (combobox)

Buenas, tengo echo un códigoq ue loq ue quiero que haga es que cuando elija algo del select se me cree un nuevo select con las mismas opciones. Os pongo el ejemplo que tengo echo:
Código:
<script language="JavaScript" type="text/javascript">
	function sumar(j){
		j++;
		return j;
	}
</script>

<%int j=1; for(int i=0;i<j;i++){ %>
<select name="seleccionarCliente" size="1" onchange="javaScript:sumar(<%=j%>)" >
	<c:forEach var="x" items="${requestScope.clienteak}">
		<option value="${x.idcliente}" name="${x.idcliente}" selected>${x.descCliente}</option>
	</c:forEach>
</select>
<%} %>
Lo que yo quiero es que la funcion sumar me duvuelva j y así como en teoría tiene que valer uno más, me tendría que hacer otro select
  #2 (permalink)  
Antiguo 30/10/2011, 14:17
 
Fecha de Ingreso: junio-2011
Mensajes: 151
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: hacer varios select (combobox)

Siento responder sin nada que decir, pero necesito hacer up, para ver si a alguien se le ocurre algo y que nos e pierda el mensaje
  #3 (permalink)  
Antiguo 30/10/2011, 14:42
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: hacer varios select (combobox)

tienes varias maneras. te muestro dos en orden de conveniencia a lo que te ocupa
  • cloneNode()
  • createElement() y appendChild()
  #4 (permalink)  
Antiguo 01/11/2011, 09:43
 
Fecha de Ingreso: junio-2011
Mensajes: 151
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: hacer varios select (combobox)

Pero tengo que utilizar las 3 funciones o puedo utilziar solo cloneNode o las otras dos???
  #5 (permalink)  
Antiguo 01/11/2011, 14:09
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: hacer varios select (combobox)

es un listado de opciones, por lo tanto o una opción u otra. pero no ambas
  #6 (permalink)  
Antiguo 02/11/2011, 04:02
 
Fecha de Ingreso: junio-2011
Mensajes: 151
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: hacer varios select (combobox)

Bien, pues ha salido, pero tengo que hacer un pequeño ajuste, a ver si podeis ayudarme. Los options que tengo en el select los cojo de la base de datos y utilizo jstl para visualizar:
Código:
<select name="seleccionarCliente" size="1" id="select" onchange="javaScript:clone()" >
	<c:forEach var="x" items="${requestScope.clienteak}">
		<option value="${x.idcliente}" name="${x.idcliente}" selected>${x.descCliente}</option>
	</c:forEach>
</select>
En la tabla de clientes el primer elemento está en blanco y así en la consulta que hago para que me aparezcan los clientes le digo que me ordenen en orden descendente y así, en el select, como lo primero que coje es el último valor, pues me aparece en blanco. Hasta ahí, perfecto. El problema es que cuando hago el cloneNode() se me crea un select nuevo pero con el primer valor de la lista, es decir, no es el vacío. ¿Como le puedo decir, que me haga el último valor?
Para explicarme mejor, en la tabla tengo esto:
"espacio blanco"
cliente 1
cliente 2
cliente 3

Tal como tengo el select y la consulta hecha, lo primero que me aparece es "espacio blanco" y al desplegar la lista pues del 3 al 1 (así está bien). Pero al hacer el cloneNode() lo primero que aparece es cliente 1 y yo quiero que apareza el "espacio blanco".

Esto es lo que he echo para hacer el clone:
Código:
function clone(){
	var select = document.getElementById ("select");
        var clonedTable = select.cloneNode (true);
        clonedTable.id = "";
        var container = document.getElementById ("container");
        container.appendChild (clonedTable);
}
Por último, según cuantas veces se cree un nuevo select quiero que me devuelva ese número y así poder hacer un input type="hidden" y enviarselo al servlet para que me haga tantos inserts como select tengo. Mi idea es algo así:
Código HTML:
<%int j=1; %>
<td id="container">
	<select name="seleccionarCliente<%=j %>" size="1" id="select" onchange="javaScript:clone(j)" >
		<c:forEach var="x" items="${requestScope.clienteak}">
			<option value="${x.idcliente}" name="${x.idcliente}" selected>${x.descCliente}</option>
		</c:forEach>
	</select>
	<input type="hidden" name="j" value="<%=j %>">
</td> 
Código:
function clone(j){
	j++;
	var select = document.getElementById ("select");
	var clonedTable = select.cloneNode (true);
	clonedTable.id = "";
	clonedTable.name="seleccionarCliente"+j;
	var container = document.getElementById ("container");
	container.appendChild (clonedTable);
        return j;
}
Como veis, en la función clone, le paso j y así cuando se mete en la función, le sumo uno y al final devuelvo. El problema de esto es que la función de javascript no me devuelve el último j y cuando voy al servlet el valor de j siempre es 1.

Espero haberme explicado bien y que alguien pueda ayudarme. Siento que el texto se haya hecho tan extenso.

Última edición por elpre; 02/11/2011 a las 04:56
  #7 (permalink)  
Antiguo 02/11/2011, 09:04
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: hacer varios select (combobox)

ahora entiendo el por qué de tu anterior pregunta. en la primera opción me falto appendChild()

puedes mostrarnos el código ya ejecutado??
  #8 (permalink)  
Antiguo 03/11/2011, 06:13
 
Fecha de Ingreso: junio-2011
Mensajes: 151
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: hacer varios select (combobox)

El código es el que he puesto en mi anterior mensaje, no lo he tocado. He tenido fiesta y he preferido no ver nada que tenga que ver con esto, jeje. O te refieres a otra parte del código??
  #9 (permalink)  
Antiguo 03/11/2011, 08:13
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: hacer varios select (combobox)

me refiero al código ejecutado. abre la página con cualquier navegador y copia el código fuente
  #10 (permalink)  
Antiguo 04/11/2011, 03:01
 
Fecha de Ingreso: junio-2011
Mensajes: 151
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: hacer varios select (combobox)

Código HTML:
<script language="JavaScript" type="text/javascript">
	function clone(j){
		j++;
		var select = document.getElementById ("select");
		var clonedTable = select.cloneNode (true);
		clonedTable.id = "";
		clonedTable.name="seleccionarCliente"+j;
		var container = document.getElementById ("container");
		container.appendChild (clonedTable);
		return j;
	}
</script>

<a  href="RedirectServlet?url=/inicio.jsp">Inicio</a>

<form action="nuevo" method="post">
<table border=1>
	<tr>
		<td><button onclick="location.href='RedirectServlet?url=/nuevos/nuevoCliente.jsp'">Nuevo</button>Cliente</td>
		
		<td id="container">
			<select name="seleccionarCliente1" size="1" id="select" onchange="javaScript:clone(j)" >
				<option value="" name=""></option>
				
					<option value="4" name="4" selected>Seat</option>

				
					<option value="2" name="2" selected>Renault</option>
				
					<option value="5" name="5" selected>Opel</option>
				
					<option value="3" name="3" selected>Nissan</option>
				
					<option value="1" name="1" selected> </option>
				
			</select>
			<input type="hidden" name="j" value="1">
		</td>

	</tr>
</table>
<input type="hidden" name="ocultoDeNuevo" value="ocultoDeNuevo">
<input type="submit" name="enviar" value="Enviar"> 
</form> 
Pues eso sería, me fijo en que el hidden que le envío es 1 creo que es ahí donde está el error.
  #11 (permalink)  
Antiguo 04/11/2011, 08:53
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: hacer varios select (combobox)

en el primer problema no parece que esté implicado javascript

con respecto al segundo
Cita:
function clone(sel){
var clonedTable = sel.cloneNode (true);
clonedTable.id = "";
clonedTable.name="seleccionarCliente[]";
var container = document.getElementById ("container");
container.appendChild (clonedTable);
document.getElementById ("j").value = parseInt(document.getElementById ("j").value) + 1;
}


<select name="seleccionarCliente1" size="1" id="select" onchange="javaScript:clone(this)" >

<input type="text" name="j" id="j" value="1">
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #12 (permalink)  
Antiguo 08/11/2011, 02:16
 
Fecha de Ingreso: junio-2011
Mensajes: 151
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: hacer varios select (combobox)

Bien, ya lo he echo, y ahora sí que el servlet me reconoce el número de j, pero ahora tengo otro problema. Y es que en la línea clonedTable.name="seleccionarCliente[]"; el array no me lo reconoce.
El primer select me lo hace bien, pero los siguientes son siempre los mismos. No sé si es cosa del javascript, que en vez de los corchetes hay que poner otra cosa, o es problema del código.

Tengo esto en el servlet:
Código:
int j=Integer.parseInt(req.getParameter("j")==null?"50":req.getParameter("j"));
System.out.println("j = "+j);
int[] idcliente=new int[j];
for(int i=0;i<j;i++){
	idcliente[i]=Integer.parseInt((req.getParameter("seleccionarCliente"+(i+1))==null?"1":req.getParameter("seleccionarCliente"+(i+1))));
	System.out.println("cliente"+(i+1)+" = "+idcliente[i]);
}
He probado a hacer que en vez de clonedTable.name="seleccionarCliente[]";
poner clonedTable.name="seleccionarCliente"+document.get ElementById ("j").value; y al ejecutar me dice que j es el número que tenga que ser e idcliente1 también me hace bien, pero ya idcliente2 me da NumberFormatException que claro, es en esa línea. Pongo esto aquí, porque no sé si es cosa de javascript o no, y también por seguir con el tema.
  #13 (permalink)  
Antiguo 08/11/2011, 05:51
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: hacer varios select (combobox)

primero decir que apenas entiendo el código, no manejos js.

has probado con clonedTable.name="seleccionarCliente"??
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #14 (permalink)  
Antiguo 08/11/2011, 09:22
 
Fecha de Ingreso: junio-2011
Mensajes: 151
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: hacer varios select (combobox)

Si, he probado sin corchete, mi idea es que cuando se crea un clone, decirle clonedTable.name="seleccionarCliente"+j;
No sé si me entiendes, en plan como j ha cambiado de valor, que el name vaya con el valor de j
  #15 (permalink)  
Antiguo 09/11/2011, 08:44
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: hacer varios select (combobox)

no comprendo para qué quieres ese subindice
Cita:
clonedTable.name="seleccionarCliente["+document.getElementById ("j").value+"]";
cuando se envían, supongo que jsp los recoge como un array
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #16 (permalink)  
Antiguo 10/11/2011, 04:33
 
Fecha de Ingreso: junio-2011
Mensajes: 151
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: hacer varios select (combobox)

Pues no sé por que será pero sigue sin funcionar. He probado toda clase de cosas, pero ni idea. Y eso que he puesto algún alert, para que me diga cuanto está valiendo j y en los alert va cambiando el valor, pero nada, no hay manera.
Yo es que tengo la sensación de que algo no cuadra. A ver si puedo explicarlo bien porque es un poco lío:
Como ves en el jsp antes del select tengo la linea <%int j=1 %> que simplemente inicializa j a 1. Luego, en el name del select, tengo name="seleccionarCliente<%=j%>" que al principio coje como nombre seleccionarCliente1. Al final, tengo un hidden que tiene name="j" e id="j" para poder operar con javaScript pero en el value tengo puesto value="<%=j %> que al principio value será 1.
En javaScript con lo que yo opero es con el hidden y lo que envío a JavaServlet es el hidden por eso creo que cuando el j de hidden es 2 el j de seleccionarCliente sigue siendo 1 y por eso no funciona. Pero claro si <%=j %> funciona para el value del hidden también tiene que funcionar para seleccionarCliente, no???
No sé si me he explicado bien, pero creo que tiene que ir por ahí el fallo
  #17 (permalink)  
Antiguo 15/11/2011, 02:31
 
Fecha de Ingreso: junio-2011
Mensajes: 151
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: hacer varios select (combobox)

hola de nuevo, he seguido intentando pero sigue sin salirme así que he querido buscar otra solución. Creo que si en vez de eso, en el select le pongo multiple haría lo mismo que yo quiero hacer. Que opinais???
  #18 (permalink)  
Antiguo 18/11/2011, 04:15
 
Fecha de Ingreso: junio-2011
Mensajes: 151
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: hacer varios select (combobox)

Bueno, este mensaje es sólo para decir que ya he conseguido hacerlo y que se puede cerrar ya el tema. Pongo la solución por si a alguien le hiciese falta aunque al final lo he hecho con multiple en vez de como quería hacerlo al principio.
Esto sería el select. Lo único que cambio es que pongo multiple al final, el nombre lo he puesto simple y el hidden lo he sacado del select.
Código HTML:
<tr>
	<td><button onclick="location.href='RedirectServlet?url=/nuevos/nuevoCliente.jsp'">Nuevo</button>Cliente</td>
	<%int j=1; %>
	<td id="container">
		<select name="seleccionarCliente" size="5" id="select" onchange="javaScript:clone(this)" multiple>
			<c:forEach var="x" items="${requestScope.clienteak}">
				<option value="${x.idcliente}" name="${x.idcliente}" selected>${x.descCliente}</option>
			</c:forEach>
				
		</select>
		<input type="hidden" name="j" id="j" value="<%=j %>">
	</td>
</tr> 
Esto es el código de javaScript en donde lo único que hago es sumarle una unidad a j cuando elige una opción distinta:
Código HTML:
<script language="JavaScript" type="text/javascript">
	function clone(sel){
		document.getElementById ("j").value = parseInt(document.getElementById ("j").value) + 1;
	}
</script> 
Finalmente, esto sería el código del JavaServlet:
Código:
int j=Integer.parseInt(req.getParameter("j")==null?"50":req.getParameter("j"));
int[] idcliente=new int[j];
for(int i=0;i<j-1;i++){
	idcliente[i]=Integer.parseInt((String) (req.getParameterValues("seleccionarCliente")[i]==null?"1":req.getParameterValues("seleccionarCliente")[i]));
}
Averiguar lo de poner [i] después del getParameterValues no sé ni cómo me ha dado por hacerlo. Lo ví un día de casualidad y me he acordado. Por lo menos funciona, y espero que no me obliguen a hacerlo de la otra manera (con el cloneNode).

Etiquetas: funcion, select
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 07:42.