Foros del Web » Programando para Internet » Javascript »

Bucle demasiado largo en Javascript

Estas en el tema de Bucle demasiado largo en Javascript en el foro de Javascript en Foros del Web. Pues eso, que tengo un bucle demasiado largo en javascript que activa/desactiva el grupo de checkbox correspondientes a un tema en concreto. Lo primero sería ...
  #1 (permalink)  
Antiguo 18/12/2003, 11:20
 
Fecha de Ingreso: diciembre-2003
Mensajes: 9
Antigüedad: 20 años, 4 meses
Puntos: 0
Bucle demasiado largo en Javascript

Pues eso, que tengo un bucle demasiado largo en javascript que activa/desactiva el grupo de checkbox correspondientes a un tema en concreto. Lo primero sería optimizar el bucle por lo que os pido que me digáis como salir del bucle for cuando ya haya cambiado todo lo que necesito, pongo exit for? end for? Ayudita please.

Y mi 2ª pregunta es quizás la que me ha traido aquí, lo del exit for y tal ya lo investigo yo solo pero es que veréis, antes de comenzar a recorrer el bucle, muestro una imagen como un reloj de arena para que el usuario no se ponga nervioso y luego la oculto pero no se aprecia el efecto porque la página se queda recorriendo el bucle este tan largo. Hay algún método como el DoEvents del visual Basic para que "realmente" se muestre la imagen mientras se recorre el bucle?

Muchas gracias por anticipado

Os copio el código por si os parece abstracto.

function DesMarcar(IdTema)
{
document.stop[k].height = 15; //esta es la imagen del reloj
document.stop[k].width = 15;
for (i = 0; i < document.frmPdf.elements.length; i++)
{
if (document.frmPdf.elements[i].value == "v" + IdTema)
{
Valor = document.frmPdf.elements[i].checked;
document.frmPdf.elements[i].disabled = 1;
for (j = i; j < document.frmPdf.elements.length; j++)
{
if (document.frmPdf.elements[j].id == IdTema)
{
document.frmPdf.elements[j].checked = Valor;
}
}
document.frmPdf.elements[i].disabled = 0;
}
}
document.stop[k].height = 0;
document.stop[k].width = 0;
}
  #2 (permalink)  
Antiguo 21/12/2003, 07:50
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Buenas....

a tu primera pregunta:

no existe el exitfor, pero tienes las sentencias break y continue

la primera sirve para salir del todo de un bucle. Cuando encuentra esta sentencia sale del for.

la segunda, continue, sirve para ignorar esa vuelta y salta a la siguiente pero continúa el bucle.

A tu segunda pregunta... tal vez hasta que no ha terminado con la función no hace nada, no sé, nunca usé un bucle tan grande como para tener que esperar nada.

pero, podrías hacer algo tal que así:

function mostrarImagen(){
document.stop[k].style.visibility = 'visible'
}

previamente habrías de haberle dado un style a esa imagen. Suponiendo que tu imagen lleve por id="reloj" habrías de pedir en head...

<style type="text/css">
#reloj{visibility:hidden}
</style>

luego podrías hacer una función para lo contrario

function ocultarImagen(){
document.stop[k].style.visibility = 'hidden'
}

finalmente una funcion para iniciarlo todo

function inicio(dato){
mostrarImagen()
IdTema = dato
DesMarcar(IdTema)
}
Y a tu función le añades una última línea que llame a la función que oculta la imagen

function DesMarcar(IdTema)
{
for (i = 0; i < document.frmPdf.elements.length; i++)
{
if (document.frmPdf.elements[i].value == "v" + IdTema)
{
Valor = document.frmPdf.elements[i].checked;
document.frmPdf.elements[i].disabled = 1;
for (j = i; j < document.frmPdf.elements.length; j++)
{
if (document.frmPdf.elements[j].id == IdTema)
{
document.frmPdf.elements[j].checked = Valor;
}
}
document.frmPdf.elements[i].disabled = 0;
}
}
ocultarImagen()
}

Así en vez de llamar directamente a tu función
onloquesea="DesMarcar(loquesea)"

... llamas a onloquesea="inicio(loquesea)"

Tal vez eso te sirva

yá nos contarás...

un saludo
  #3 (permalink)  
Antiguo 22/12/2003, 05:46
 
Fecha de Ingreso: diciembre-2003
Mensajes: 9
Antigüedad: 20 años, 4 meses
Puntos: 0
ok tunait, mcuhas gracias

he solucionado el retardo con el break y el continue pero de todos modos buena idea la de separar el trabajo por funciones, por pequeñas que sean.

Te agradezco tu ayuda.

Salud.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 22:01.