Categorías > Lenguajes > Javascript > [SOLUCIONADO] Problemas con Javascript y Arrays ...
Nuevo Mensaje | Responder
CHuLoYo


762 envíos
Desconectado
1706 lecturas
5 respuestas
[SOLUCIONADO] Problemas con Javascript y Arrays21-12-2009 a las 00:24:18

A ver si alguien me puede echar un cable. En realidad , aunque el problema sea de Javascript, los arrays y los bucles son iguales en todos los lenguajes (o por lo menos similares).

El caso, es que estoy haciendo en los mensajes privados la selección de mensajes para borrar. Todo ello lo hago con Javascript con este código (comentado):

Código Fuente:

/*inicializo la variable global mensajesp como nuevo array*/
var mensajesp=new Array();

/*funcion para seleccionar/deseleccionar mensajes*/
function seleccionaMensajePrivadoParaBorrar(id) {

/*la variable donde, designará con cero si no está seleccionada, y con uno en caso contrario*/
    donde=document.getElementById("aseleccion"+id);
    /* si el elemento no está seleccionado, procedemos a seleccionarlo */
    if(donde.value==0) {

        /*Miramos cuántos elementos totales tenemos*/
        total=document.getElementById("cuantosMensajesSeleccionados");
        ese=Number(total.value)+1; /* sumamos 1*/

        mensajesp[ese]=id; /* le metemos el identificador al elemento del array */
        total.value=ese; /* un elemento más total */
        donde.value=1; /* lo declaramos como seleccionado */

        /*Aquí ya coloreamos*/ document.getElementById("selecsionostia"+id).style.backgroundColor="yellow";
    } else { /*sino, lo deseleccionamos */

        total=document.getElementById("cuantosMensajesSeleccionados");

/*borramos el elemento que coincida recorriendo todo el array*/
        for(i=1;i<=total.value;i++) {
            if(mensajesp[i]==id){
                delete mensajesp[i];
            }
        }
        document.getElementById("selecsionostia"+id).style.backgroundColor="";
        total.value=Number(total.value)-1; /*quitamos color y restamos al total */
        donde.value=0; /* marcamos como no seleccionado */

    }
}


function borrarMensajesSeleccionados() {

    total=document.getElementById("cuantosMensajesSeleccionados");

    if (total.value==0) { alert('No hay mensajes seleccionados'); } else {
        var todostoditos="";
/* vamos añadiendo todos los elementos del array a una variable llamada todostoditos, que se enviará al php para eliminar de la base de datos.*/
        for(i=1;i<=(total.value)+1;i++) {
            if(mensajesp[i]) { todostoditos+=mensajesp[i]+","; }
        }

        /*se envía*/ document.getElementById("invisible4").src="borrarseleccion.php?user="+user+"&elementos="+todostoditos;
    }

}


Funciona bien, pero si seleccionamos dos elementos (en orden, primero uno y luego el segundo), y deseleccionamos el primero de ellos, ya no reconoce al segundo. Sigue existiendo pero aunque lo deseleccionemos no se borra.

¿A alguien se le ocurre algo?

www.Esquio.net | Diseño y programación web profesional
Responder | Citar | Moderar | Mensaje Privado
Training Channel
wilmaforez


65 envíos
Desconectado

#1
RE: Problemas con Javascript y Arrays21-12-2009 a las 11:57:40

¡Buenas!
Creo que el problema está aqui:
Código Fuente:
/*borramos el elemento que coincida recorriendo todo el array*/
        for(i=1;i<=total.value;i++) {
            if(mensajesp[i]==id){
                delete mensajesp[i];
            }


No sé cómo gestiona los arrays javascript.  Pero se me ocurren un par de cosas.

Que cuando haces lo que dices ( borrar un elemento que está delante de otro ), al recorrer ese bucle pase por un elemento que no existe, dé error y pare la ejecución.

También puede ser que el valor de "total.value" sea menor pero sigan habiendo la misma cantidad de elementos ( aunque uno de ellos esté vacío ), y por tanto no recorra todos los elementos.

Espero haberme acercado al menos :D.
Saludos.


Responder | Citar | Moderar | Mensaje Privado
CHuLoYo


762 envíos
Desconectado

#2
RE: Problemas con Javascript y Arrays21-12-2009 a las 13:38:55

Tu segunda respuesta es la correcta. No da error cuando un elemento está vacío gracias al IF. Con él controlo si existe o no.

Enhorabuena wilmaforez, a ver cómo lo arreglo. ¿Se te ocurre algo?

Edito:

Se me acaba de ocurrir una idea: a medida que se va seleccionando, se añade a una variable en vez de en un array, separados por comas por ejemplo:

variable="20,41,63";

Cuando se deseleccionen, se hace un split y se recorre todo mirando qué valor coincide, algo así:

variable2=variable.split;
variable2[0]=20;
variable2[1]=41;
variable2[2]=63;

for(condiciones) {
        if(variable2[i]==id) {
                delete variable2[i];
        }
}


Y volveríamos a pintar todos. Pero he aquí el problema. ¿Cómo puedo saber cuántos elementos tiene un array?

Saludos.

www.Esquio.net | Diseño y programación web profesional
Responder | Citar | Moderar | Mensaje Privado
wilmaforez


65 envíos
Desconectado

#3
RE: Problemas con Javascript y Arrays21-12-2009 a las 16:40:18

Buenas,
Me alegro de haber acertado :D.

Mis ideas para arreglar en problema serían:
Usar un arrays dinámico ( ni siquiera sé si esto es posible en javascript ); o correr los elementos del array cada vez que se elimina un elemento. Pero lo del split ese tiene buena pinta.
Puedes guardar una variable con la cantidad de elementos que llevas guardados, igual que hacías antes ( creo ); y en este caso no tendrías el problema de el elemento vacío ya que el array se genera cada vez.

EDITO. He estado indagando respecto a la función split(). Y en realidad no necesitas guardar una variable extra.
Sería algo así:
Código Fuente:

variable2=variable.split( "," );

for( i = 0; i < variable2.length; i++ ) {
        if( variable2[ i> == id ) {
                delete variable2[ i>;
        }
}



¡Saludos!


Responder | Citar | Moderar | Mensaje Privado
CHuLoYo


762 envíos
Desconectado

#4
RE: Problemas con Javascript y Arrays21-12-2009 a las 16:58:46

variable.length ! Era lo que buscaba! Muchas gracias

www.Esquio.net | Diseño y programación web profesional
Responder | Citar | Moderar | Mensaje Privado
CHuLoYo


762 envíos
Desconectado

#5
RE: Problemas con Javascript y Arrays21-12-2009 a las 17:34:16

Wow! El código ha quedado niquelado, de miedo!
Aquí lo comparto con vosotros (he de decir que me han ayudado):

Código Fuente:var mensajesp=new Array();
function seleccionaMensajePrivadoParaBorrar(id) {

    var donde=document.getElementById("aseleccion"+id);

    var total=document.getElementById("cuantosMensajesSeleccionados");

    if(donde.value==0) {

        mensajesp.push(id);
        total.value=mensajesp.length;
        donde.value=1;
        document.getElementById("selecsionostia"+id).style.backgroundColor="yellow";
    } else {
        for(i=0;i<mensajesp.length;i++) {
            if(mensajesp[i]==id){
            mensajesp.splice(i, 1);
            break;
            }
        }
        document.getElementById("selecsionostia"+id).style.backgroundColor="";
        total.value=mensajesp.length;
        donde.value=0;
    }

}

function borrarMensajesSeleccionados() {

    var total=document.getElementById("cuantosMensajesSeleccionados");

    if (!mensajesp.length) { alert('No hay mensajes seleccionados'); } else {

        var todostoditos=mensajesp.join(",");
              document.getElementById("invisible4").src="borrarseleccion.php?user="+user+"&elementos="+todostoditos;
    }

}

www.Esquio.net | Diseño y programación web profesional
Responder | Citar | Moderar | Mensaje Privado