Comunidad de diseño web y desarrollo en internet online

comportamiento erratico del codigo javascript

Citar            
MensajeEscrito el 01 Dic 2014 09:37 pm
Buenas tardes, este hilo es para tratar de resolver y aprender de algunos comportamientos erraticos, inusuales, y muy extraños, por ejemplo comenzare con uno esperando a alguien le aya pasado alguna vez, y pueda ayudarme a encontrar una solucion.

me ha ocurrido lo siguiente: el codigo no funciona hasta que ponga un alert, con cualquier texto.
esto es por ejemplo
var x=10,y=20;
function suma(){
x=x+y;
document.getelementbyid("algo").value=x;
}

suma();

este codigo deveria colocar colocar en el input con id algo el valor 30, es ilustrativo, mi codigo es mucho mas robusto, lo curioso es que suponiendo que sea el anterior no funciona hasta que coloque un alert en algun lugar... a alguien le a pasado? y de casualidad saben como evitarlo?

Por rod00x3

Claber

595 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 02 Dic 2014 02:52 pm
Suponiendo que el código real no tiene errores de sintaxis (el que has puesto aquí sí los tiene), y la mecánica es la misma, lo que veo es que al ejecutar la función suma() el elemento con id "algo" todavía no existe en el DOM y por lo tanto getElementById() está devolviendo nulo.

Al poner un alert, simplemente estás provocando una demora que hace que el DOM se complete de crear.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 02 Dic 2014 03:05 pm
Antes que nada gracias por tu aportacion. en efecto el codigo era ilustrativo, mi codigo real es muy grande y con un sin fin de funciones todas ejecutadas despues de un window load.

por eso es extraño jijiji, ayer de suerte encontre un codigo que jamas habia visto antes, pero me ayudo mucho, bueno explico para que les sirva tambien a ustedes, tengo la costumbre de declarar al principio variables que controlan todo el flujo del programa, conforme se ejecutan funciones estas cambian de valor, pero las funciones no las ejecuto con returns.

Lo primero que me pense de mi problema es que era algo de ambito de variables, pero es ilogico, poner un alert no redefine la variable, el codigo que encontre y use es el siguiente window[mi_variable]

Sustitui toda aparicion de mi variable global por window[mivariable] y todo funciona jiji
ejemplo antes (ilustrativo no cuidando sintaxis)


var guardar;

function checadatos(){
... si todo bien guardar=1;
.. si no guardar=3
}
function despliega(){
.. si guardar es 3 mensaje "No estan bien tus datos"
}

Lo cambie por esto:
var guardar;

function checadatos(){
... si todo bien window[guardar]=1;
.. si no window[guardar]=3
}
function despliega(){
.. si window[guardar] es 3 mensaje "No estan bien tus datos"
}

Nota curiosa, con window[variable], no importa si la variable fue creada por get o post, o ajax, siempre puedo accesar a ella, de manera adecuada, claro respetando el ambito de la variable

Por rod00x3

Claber

595 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 02 Dic 2014 04:57 pm
Es un mal diseño de funciones, pues no deberias de utilizar una variable global definida de esa manera. En fin.

El problema es como dice DriverOp, en teoria para eso existe el DOM Ready, para que se ejecute el JS una vez que el DOM este listo:

http://youmightnotneedjquery.com/#ready

Por elporfirio

Claber

652 de clabLevel

1 tutorial

Genero:Masculino  

FullStack Web Developer

chrome
Citar            
MensajeEscrito el 02 Dic 2014 06:49 pm
:) Gracias por tu respuesta elporfirio. El proposito de este post es ilustrativo, si lees bien mi post indico que todo esta perfecto jijiji no solo despues de un load, sino de un ready, jijiji es muy robusto mi codigo no puedo postearlo todo, el punto de este post es conocer y compartir cosas extrañas que pasan en el codigo, como programadores avanzados, cuando ya se reviso todo paso a paso.

por favor nutramos este post, para que sea util, no haciendo redundancias en lo obio,

Es como si otro compañero del foro puciese que no le carga una imagen de 20x 20, pero si una de 40x40
y lo primero que le contestemos es que revice su liga o si esta cargada la imagen, cuando el tema deberia ir mas alla. no se si tiene un plugin especial o algo asi. En fin ya comparti mi caso y mi solucion, espero le sirva a alguien, y espero poder ver casos curiosos, como otro que nunca pude resolver, este con PHP, en la mañana mi codigo funcionaba y en la tarde no, jijiji y en todo el codigo no habia ni una sola instruccion de date.. siempre pense que algo habia en el servidor pero nunca supe porque.

Por rod00x3

Claber

595 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.