Foros del Web » Programando para Internet » Javascript »

variable se borra

Estas en el tema de variable se borra en el foro de Javascript en Foros del Web. Buenas! No se porqué, pero me ocurre que unos arrays se me borran cuando intento acceder a una función... En mi JS tengo definido esto: ...
  #1 (permalink)  
Antiguo 04/04/2013, 04:26
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
variable se borra

Buenas!

No se porqué, pero me ocurre que unos arrays se me borran cuando intento acceder a una función...

En mi JS tengo definido esto:

Código Javascript:
Ver original
  1. var G_pFilterI=new Array();
  2. var G_pFilter=new Array();

Más adelante, las intento usar en esta función:

Código Javascript:
Ver original
  1. function putFilter(q){
  2. /*
  3. ge(id) es un sinónimo de document.getElementById(id)
  4. */ 
  5.         con=0;
  6.     min=0;
  7.     max=3;
  8.        
  9.     if(q>3){
  10.         min=3;
  11.         max=8;
  12.     }
  13.  
  14.     for(i=0;i<G_pFilterI.length;i++){
  15.         ge(G_pFilterI[i]).setAttribute('title',G_pFilterI[i]);
  16.         ge(G_pFilterI[i]).innerHTML=G_pFilter[i];
  17.     }
  18.    
  19.     var G_pFilterI=new Array();
  20.     var G_pFilter=new Array();
  21.    
  22.     for(i=min;i<max;i++){
  23.         if(i!=q-1){
  24.             ac=G_filter[i].split(';');
  25.            
  26.             for(j=0;j<ac.length;j++){
  27.                 G_pFilterI[con]=ac[j];
  28.                 G_pFilter[con++]=ge(ac[j]).innerHTML;
  29.                 ge(ac[j]).setAttribute('title','');
  30.                 ge(ac[j]).innerHTML='';
  31.             }
  32.         }
  33.     }
  34. }

Pero cuando entra a la función me dice que G_pFilterI no está definido...

¿Alguien sabe porqué pasa esto?

Gracias.
  #2 (permalink)  
Antiguo 04/04/2013, 05:05
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: variable se borra

Fijate y dinos que línea es la que lanza el error....

Las líneas 1 y 2 del primer código estan fuera de cualquier función?

Si es así y las usas como variables globales por que las redeclaras en las líneas 19 y 20 de la función?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 04/04/2013, 05:19
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: variable se borra

Cita:
Iniciado por quimfv Ver Mensaje
Fijate y dinos que línea es la que lanza el error....

Las líneas 1 y 2 del primer código estan fuera de cualquier función?

Si es así y las usas como variables globales por que las redeclaras en las líneas 19 y 20 de la función?
Las variables globales están fuera de toda función, al inicio mismo del archivo .js

El error lo lanza en la línea 14 (cuando entra en el primer bucle).

"Uncaught TypeError: Cannot read property 'length' of undefinded", me dice.

Las redefino para vaciar los arrays...

Gracias por responder y saludos.
  #4 (permalink)  
Antiguo 04/04/2013, 05:24
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: variable se borra

19 var G_pFilterI=new Array();
20 var G_pFilter=new Array();

creo que debes quitar "var" para vaciar las variables globales, sino estas creando arrays nuevos de ambito local de la función ... (creo)

19 G_pFilterI=new Array();
20 G_pFilter=new Array();

Lo de la linea 14 con lo que muestras no se que puede estar provocandolo... ademas de la declaracion de los array les das contenido... supongo.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 04/04/2013, 05:30
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: variable se borra

Ok, corregiré esta parte.

Al entrar en la función por primera vez ni G_pFilterI ni G_pFilter tienen datos, pero están definidas como array (con lo que su length es 0 y no pasarán por el primer bucle)

Al pasar por el segundo bucle se llenan con datos, y tras una segunda llamada pasarán por el primer bucle...

He comprobado lo siguiente:

Antes de llamar a la función putFilter(q), si en chrome inspecciono:

"G_pFilter.length" me da como resultado 0, y "G_pFilter" me da como resultado "array[0]"

Una vez dentro de la función, "G_pFilter" me da como resultado "undefinied"

Pasa lo mismo con la otra variable.

La única vez que llamo a la función putFilter(q) es esta:

Código Javascript:
Ver original
  1. <select name="filter" id="filter" onchange="putFilter(this.options[this.selectedIndex].value)">
  2. <!--valores-->
  3. </select>

A ver si podemos sacar algo en claro porque no me lo explico...

EDIT:

He quitado los "var" que decías, he reiniciado de caché, he borrado los datos viejos de navegación y mágicamente ya funciona...

En fin, cosas de la vida e internet xD

Gracias por ayudar!

Última edición por DoHITB; 04/04/2013 a las 05:39
  #6 (permalink)  
Antiguo 04/04/2013, 06:00
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: variable se borra

Código HTML:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <title>Documento sin t&iacute;tulo</title>
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  4. <script language="JavaScript" type="text/JavaScript">
  5. var G_pFilterI=new Array();
  6. var G_pFilter=new Array();
  7. function ge(id){
  8. return document.getElementById(id);
  9. }
  10. function putFilter(q){
  11. /*
  12. ge(id) es un sinónimo de document.getElementById(id)
  13. */  
  14.     var con=0;
  15.     var min=0;
  16.     var max=3;
  17.        
  18.     if(q>3){
  19.         min=3;
  20.         max=8;
  21.     }
  22.  
  23.     for(i=0;i<G_pFilterI.length;i++){
  24.        ge(G_pFilterI[i]).setAttribute('title',G_pFilterI[i]);
  25.        ge(G_pFilterI[i]).innerHTML=G_pFilter[i];
  26.    }
  27.    
  28.    G_pFilterI=new Array();
  29.    G_pFilter=new Array();
  30.    
  31.    for(i=min;i<max;i++){
  32.        if(i!=q-1){
  33.            ac=G_filter[i].split(';');
  34.            
  35.            for(j=0;j<ac.length;j++){
  36.                G_pFilterI[con]=ac[j];
  37.                G_pFilter[con++]=ge(ac[j]).innerHTML;
  38.                ge(ac[j]).setAttribute('title','');
  39.                ge(ac[j]).innerHTML='';
  40.            }
  41.        }
  42.    }
  43. }
  44.  
  45.  
  46. </head>
  47.  
  48. <select name="filter" id="filter" onchange="putFilter(this.options[this.selectedIndex].value)">
  49. <option value="1">1</option>
  50. <option value="2">2</option>
  51. </body>
  52. </html>



Error: ReferenceError: G_filter is not defined
Source file: file:///C:/Documents%20and%20Settings/..../Mis%20documentos/TMPb5xefkqbdh.htm
Line: 35

A mi me marca G_filter en la línea 35 ....

ac=G_filter[i].split(';');

y efectivamente G_filter no esta definido.

Imagino que es un error "ortográfico" te falta la p de G_pfilter pero si es así tampoco tiene sentido hacer split sobre algo que esta vacío...

Por otro lado usa vmin y vmax para diferenciarlos de las palabras min y max....

O muestras todo lo que tienes o es difícil ayudarte....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 04/04/2013 a las 06:10
  #7 (permalink)  
Antiguo 04/04/2013, 07:50
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: variable se borra

Oh, cierto... se me había olvidado.

G_filter es otra variable global que se llena (se llena como es debido) en otra función...

Llevaba tanto tiempo mirando la función "putFilter" que me había olvidado de la función que llena G_filter.

De todas maneras, como te digo, la variable G_filter tiene los valores adecuados.

Gracias por responder.

Etiquetas: borra, html, js, variable
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 04:29.