Ver Mensaje Individual
  #6 (permalink)  
Antiguo 06/01/2009, 09:05
cesartapiag
 
Fecha de Ingreso: diciembre-2008
Mensajes: 8
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Struts JSP - Crear listas anidadas

Encontré el problema, era la compatibilidad de la función add() en Firefox y en Explorer. Tenia que ver con los estándares que se ocupan en ambos navegadores(DOM2 y DOM1), y con el uso de una variable adicional en el caso de la función para Firefox. Hice una función para arreglarlo:

function agregaOpcion(selecciona,opcion) {
try {
selecciona.add(opcion,null);
}
catch (e) {
selecciona.add(opcion,selecciona.length);
}
}

Y se llama como:

agregaOpcion(f.listarUsuariosXProyecto,opt);


El codigo final en javascript queda así:



function obtenerPrimerID(texto)
{
var z;

for(z=0; z<texto.length; z++)
if(texto.substring(z, z+1) == '@')
return texto.substring(0,z);

return "";
}

function obtenerSegundoID(texto)
{
var z;
var posx = 0;

for(z=0; z<texto.length; z++)
{
if(texto.substring(z, z+1) == '@' && posx == 0 )
{
posx = z+1;
}
else
{
if(texto.substring(z, z+1) == '@' && posx > 0 )
return texto.substring(posx,z);
}
}
return "";
}

function obtenerDescripcion(texto)
{
var z;
var posx = 0;
var nArr = 0;
var largo = 0;

largo = texto.length;
for(z=0; z<texto.length; z++)
{
if(texto.substring(z, z+1) == '@' && posx == 0 )
{
posx = 1;
}
else
{
if(texto.substring(z, z+1) == '@' && posx == 1)
{
return texto.substring(z+1,largo);
}
}
}

return "";
}

function agregaOpcion(selecciona,opcion) {
try {
selecciona.add(opcion,null);
}
catch (e) {
selecciona.add(opcion,selecciona.length);
}
}

function filtroCombo()
{
f = document.administrarFB;
var usuarios= new Array(f.listarUsuariosXProyecto.options.length);
<c:forEach items="${administrarFB.listaUsuariosXProyecto}" var="comboTO" varStatus="statusComboTO">
<c:if test="${(statusComboTO.count) == 1}">
usuarios[0] = "<c:out value="${comboTO.idProyecto}"/>@<c:out value="${comboTO.codigo}"/>@<c:out value="${comboTO.descripcion}"/>";
usuarios[<c:out value="${statusComboTO.count}"/>] = "<c:out value="${comboTO.idProyecto}"/>@<c:out value="${comboTO.codigo}"/>@<c:out value="${comboTO.descripcion}"/>";
</c:if>
<c:if test="${(statusComboTO.count) != 1}">
usuarios[<c:out value="${statusComboTO.count}"/>] = "<c:out value="${comboTO.idProyecto}"/>@<c:out value="${comboTO.codigo}"/>@<c:out value="${comboTO.descripcion}"/>";
</c:if>
</c:forEach>

if(parseInt(f.listarProyectos.selectedIndex) != -1)
{
f.listarUsuariosXProyecto.disabled = false;
f.listarUsuariosXProyecto.options.length = 0;
var opt = document.createElement('OPTION');
opt.text = "Todos";
opt.value = parseInt(0);
agregaOpcion(f.listarUsuariosXProyecto,opt);
var i = 1;
var texto = "";
for(var k = 0; k < usuarios.length; k++)
{
if(i < usuarios.length)
{
var proyectoID;
var usuarioID;
var usuarioDescripcion;

texto = usuarios[i];
proyectoID = obtenerPrimerID(texto);

if(parseInt(f.listarProyectos.value) == parseInt(proyectoID))
{
usuarioID = obtenerSegundoID(texto);
usuarioDescripcion = obtenerDescripcion(texto);

var opt = document.createElement('OPTION');
opt.text = usuarioDescripcion;
opt.value = parseInt(usuarioID);
agregaOpcion(f.listarUsuariosXProyecto,opt);
}
}
i++;
}
}
else
{
f.listarUsuariosXProyecto.selectedIndex = 0;
f.listarUsuariosXProyecto.disabled = false;
}
}


Si conocen otra forma mas eficiente usando javascript, háganla saber por favor.

Gracias y espero que les sirva.