Foros del Web » Programando para Internet » Javascript »

problema al eliminar registro de un array (delete mensajesp[i])

Estas en el tema de problema al eliminar registro de un array (delete mensajesp[i]) en el foro de Javascript en Foros del Web. Hola amigos, estoy creando un script para enviar los elementos a borrar de una base de datos a una página php, pero seleccionando y deselecionando ...
  #1 (permalink)  
Antiguo 18/12/2009, 13:11
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
problema al eliminar registro de un array (delete mensajesp[i])

Hola amigos, estoy creando un script para enviar los elementos a borrar de una base de datos a una página php, pero seleccionando y deselecionando con javascript. El código funciona bien, pero cuando trato de borrar un elemento del array (deseleccionando un mensaje) en la línea delete mensajesp[i]; me borra dos registros, o eso parece, con el for.

Si seleccionas dos registros va bien. Si a esos dos registros le quitas uno, en vez de aparecer el que queda, no aparece ninguno.

Agradezco cualquier ayuda.

Un saludo.
Código PHP:
var mensajesp=new Array();
function 
seleccionaMensajePrivadoParaBorrar(id) {

    
donde=document.getElementById("aseleccion"+id);
    if(
donde.value==0) {

        
total=document.getElementById("cuantosMensajesSeleccionados");
        
ese=Number(total.value)+1;

        
mensajesp[ese]=id;
        
total.value=ese;
        
donde.value=1;

        
document.getElementById("selecsionostia"+id).style.backgroundColor="yellow";
    } else {

        
total=document.getElementById("cuantosMensajesSeleccionados");

        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;
        
donde.value=0;

    }

}


function 
borrarMensajesSeleccionados() {

    
total=document.getElementById("cuantosMensajesSeleccionados");

    if (
total.value==0) { alert('No hay mensajes seleccionados'); } else {
        var 
todostoditos="";

        for(
i=1;i<=total.value;i++) {
            if(
mensajesp[i]) { todostoditos+=mensajesp[i]+","; }
        }

        var 
user=top.document.getElementById("nombreUsuario").value;
    }


He puesto el highlight en php porque el code no colorea javascript, el cual es una pena.

Espero que alguien me pueda ayudar, gracias y un saludo.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.

Última edición por CHuLoSoY; 18/12/2009 a las 14:54 Razón: foro equivocado
  #2 (permalink)  
Antiguo 18/12/2009, 13:42
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola CHuLoSoY

Muevo tu tema al foro de Javascript desde CSS.

Saludos,
  #3 (permalink)  
Antiguo 20/12/2009, 17:09
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: problema al eliminar registro de un array (delete mensajesp[i])

Alguien puede ayudarme?

Cita:
for(i=1;i<=total.value;i++) {
if(mensajesp[i]==id){
delete mensajesp[i];
}
}
y
Cita:
for(i=1;i<=total.value;i++) {
if(mensajesp[i]) { todostoditos+=mensajesp[i]+","; }
}
Gracias!
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #4 (permalink)  
Antiguo 20/12/2009, 21:48
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: problema al eliminar registro de un array (delete mensajesp[i])

Me suena a que hay una confusion con el for... Los arrays secuenciales tienen indices numericos que empiezan desde cero, o sea

Código PHP:
 for(i=0;i<total.value;i++) {
            if(
mensajesp[i]==id){
                
delete mensajesp[i];
            }
        } 
Una pregunta: el valor guardado en la variable id se puede repetir? porque sino te convendria poner un break despues del delete
  #5 (permalink)  
Antiguo 20/12/2009, 23:07
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: problema al eliminar registro de un array (delete mensajesp[i])

yo le daria otro enfoque al codigo, especialmente a la inicializacion del array. yo tu me olvido de comenzar el indice por 1 porque trae mas problema que beneficio. intenta la siguiente modificacion.
Código:
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; // como menciona jackson666, si los IDs son unicos, no hay porque seguir recorriendo el array;
            }
        }
        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(",");
        var user=top.document.getElementById("nombreUsuario").value;
    }

}
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #6 (permalink)  
Antiguo 21/12/2009, 07:30
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: problema al eliminar registro de un array (delete mensajesp[i])

He descubierto que el error está en el total.value, ya que si pone que el total es 1 y el registro existente es i=2, no llega a él aunque exista. ¿Cómo podría solucionarlo? ¿Cómo plantearlo?

Gracias :)

Edito, he visto el código anterior y creo que voy a probarlo. No sabía eso del .lenght para saber la longitud del array. Yo lo hacía con un campo oculto que sumaba o restaba.

Muchas gracias de nuevo.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.

Última edición por CHuLoSoY; 21/12/2009 a las 08:05
  #7 (permalink)  
Antiguo 21/12/2009, 10:33
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: problema al eliminar registro de un array (delete mensajesp[i])

Cita:
Iniciado por zerokilled Ver Mensaje
yo le daria otro enfoque al codigo, especialmente a la inicializacion del array. yo tu me olvido de comenzar el indice por 1 porque trae mas problema que beneficio. intenta la siguiente modificacion.
Código:
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; // como menciona jackson666, si los IDs son unicos, no hay porque seguir recorriendo el array;
            }
        }
        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(",");
        var user=top.document.getElementById("nombreUsuario").value;
    }

}


Wow! Tu código funciona de miedo. Le he añadido todo el código que no he puesto (por irrelevante en el problema) y funciona a las mil maravillas. No conocía el .join con el que me ahorro el for.
Tampoco conocía splice, que estoy buscando ahora mismo en google para saber qué carajos hace.
Y tampoco el .push, que veo que añade un elemento en el array.
Con este código todo se hace de manera ordenada, eres un fenómeno.Mil millones de gracias!
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #8 (permalink)  
Antiguo 21/12/2009, 10:36
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: problema al eliminar registro de un array (delete mensajesp[i])

http://www.w3schools.com/jsref/jsref_obj_array.asp
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
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 14:24.