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.