Comunidad de diseño web y desarrollo en internet online

problema con modificación de variable global en función

Citar            
MensajeEscrito el 27 Ene 2021 03:57 am
en esta ocasión vengo por un error bastante simple que me ocurrió, pero que me ha dejado pensativo. Sucede que tengo una variable normal declarada de forma global, obviamente fuera de la función, y la misma al darle cick a un elemento de mi menú, debe aumentar en 1 su valor. esto la verdad ya lo había hecho antes y la verdad no suponía un problema, pero al repetirlo con esta variable, simplemente no quiere funcionar

Código :

 <div class=buscador>
     <input type="text" value="nombre" id="texto1" class=texto1>
      <input type="button" value="buscar" onclick="buscar()" class= "boton1">
  </div>
javascript

i2=0;
function buscar(){
    //buscador de texto
    //let texto=document.getElementById("texto1").value;
    // Obtener solo elementos en contenedor original
    //let texto2=b.getElementsByClassName(texto);

    //b.style.display="none";
    //bb.style.display="block";
    // Limpia el contenedor, no hay problema
    //bb.innerHTML="";

 i2=i2+1; //ya intenté con i2++, i2=+1;
 
    // Limitas el for con la cantidad de elementos obtenidos
    //for(let num=0; num<texto2.length; num++){
        // Inserta una copia, en lugar del original
        //bb.appendChild(texto2[num].cloneNode(true));
    }
 
}

if(i2<0){

  c.style.display="none"; //i2 se queda en 0 y sigue ejecutando esta parte
}
Ahora, apliqué eso mismo con el siguiente código y funciona:

html

<div value="a" class="a2" id="a2"><input type="button" value="Menu" onclick="menu2()" class= "menu2">
</div>  
javascript

i=0;
function menu2 (){
 //infoc.style.display="none";
  //c.style.display="inherit";
   //a2.style.display="none"; 

 i=i+1;
}

 if(i==1){
    //a2.style.display="none";
     //b.setAttribute("style","margin-top:10px;"); //este si funciona
  }


la verdad es algo muy básico pero es que no encuentro diferencia alguna entre ambos códigos; he modificado variables de esta forma antes y ya intentado devolviendo su valor, cambiando el nombre, los símbolos de (<>) por (==, =) y nada. Cabe destacar, todo lo demás, funciones... funciona perfectamente Muchas gracias por todo

Por adrianjsds

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 28 Ene 2021 09:06 am
El valor de la variable se incrementa al ejecutarse la función, con lo cual si quieres que pase algo cuando se incremente, ponlo en la función. Si lo pones fuera no se entera, a menos que uses concepto mas avanzados, como Observables

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 30 Ene 2021 04:00 am

solisarg escribió:

El valor de la variable se incrementa al ejecutarse la función, con lo cual si quieres que pase algo cuando se incremente, ponlo en la función. Si lo pones fuera no se entera, a menos que uses concepto mas avanzados, como Observables

Jorge


El problema esta en que si yo meto la iniciación de la variable, lo que este dentro del condicional no va a funcionar, y yo quiero que el tramo de código que esta dentro del if() se ejecute todo el tiempo a menos que presione el botón buscar. basicamente es un forma de comprobar el estado de la variable: si buscar no ha sido presionado, ejecuta este código, si ha sido presionado (i>0) no lo ejecutes. Gracias por su respuesta

Por adrianjsds

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 30 Ene 2021 10:50 am
Testear constantemente una variable que cambia solo en un evento es un defecto de diseño, segun entiendo:

"al darle cick a un elemento de mi menú, debe aumentar en 1 su valor"

Si no le das click, la variable siempre vale lo mismo, cual es el punto de chequearla constantemente?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 30 Ene 2021 08:59 pm

solisarg escribió:

Testear constantemente una variable que cambia solo en un evento es un defecto de diseño, segun entiendo:

"al darle cick a un elemento de mi menú, debe aumentar en 1 su valor"

Si no le das click, la variable siempre vale lo mismo, cual es el punto de chequearla constantemente?

Jorge


pero ese es precisamente el punto, deseo que este constantemente chequeandola, por que una vez que valga 1 se dejara de ejecutar ese tramo de código, y cuando deseo que se vuelva a ejecutar, le resto el uno en otras funciones según la acción que realice, para que así nuevamente se vuelva a ejecutar. si hay algún otro método más efectivo, me ayudaría mucho saberlo. Gracias por tu srguimiento jorge

Por adrianjsds

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 01 Feb 2021 09:31 am
Chequear constantemente cualquier valor (patron Observer) consume muchos recursos y siempre debe ser una opción justificada. Dado que todo lo que ocurre esta conducido por eventos (acción del usuario), es en esos eventos (y no todo el tiempo) donde se debe ejecutar el chequeo.
Un evento es un click, es un cambio de info en un input, etc. Identifica esos eventos y escribe un handler para chequear la variable y hacer lo que necesites.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 03 Feb 2021 02:27 am

solisarg escribió:

Chequear constantemente cualquier valor (patron Observer) consume muchos recursos y siempre debe ser una opción justificada. Dado que todo lo que ocurre esta conducido por eventos (acción del usuario), es en esos eventos (y no todo el tiempo) donde se debe ejecutar el chequeo.
Un evento es un click, es un cambio de info en un input, etc. Identifica esos eventos y escribe un handler para chequear la variable y hacer lo que necesites.

Jorge


Buenas jorge, con respecto al chequeo constante comprendo por que lo dices, el problema es que es un scroll que realiza cambios con respecto su posición, necesito que chequee la posición constantemente.
Con respecto a la solución que propones, la verdad es que no comprendo muy bien, me ayudaría muchísimo que me proporciones un ejemplo, la verdad es que soy principiante. Gracias por la ayuda

Por adrianjsds

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 05 Feb 2021 08:32 am
Para chequar constantemente algo necesitas ejecutar el código constantemente, por ejemplo

Código :

setInterval(function(who){
  if(who==1){
    //hace algo
  }
}, 500, i)


El setInterval se ejecuta cada medio segundo y pasa la variable i como argumento

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 08 Feb 2021 03:35 am

solisarg escribió:

Para chequar constantemente algo necesitas ejecutar el código constantemente, por ejemplo

Código :

setInterval(function(who){
  if(who==1){
    //hace algo
  }
}, 500, i)


El setInterval se ejecuta cada medio segundo y pasa la variable i como argumento

Jorge


Buenas jorge, la cosa es que mi problema no esta en el chequeo constante, pues las funciones se activan mediante botones y no tengo problema con su ejecución, yo lo que no consigo hacer es modificar una variable local dentro de la función, es decir que cree una variable y que al ejecutar la función, el valor de esta variable local cambie para todo el código, incluso fuera de la función.
Nuevamente, gracias por tu gran aporte

Por adrianjsds

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 09 Feb 2021 05:05 am
Si la declaras fuera de la función, es global, si la declaras dentro es local. En este ejemplo

Código :

var i = 0;
function menu2 (){
 //infoc.style.display="none";
  //c.style.display="inherit";
   //a2.style.display="none"; 

 i=i+1;
}

 if(i==1){
    //a2.style.display="none";
     //b.setAttribute("style","margin-top:10px;"); //este si funciona
  }

el bloque de abajo se ejecuta una sola vez con i valiendo cero y no se ejecuta nunca mas, el código de la funcion si se ejecuta cada vez que se llama, e i se ira incrementando

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 14 Feb 2021 09:19 pm

solisarg escribió:

Si la declaras fuera de la función, es global, si la declaras dentro es local. En este ejemplo

Código :

var i = 0;
function menu2 (){
 //infoc.style.display="none";
  //c.style.display="inherit";
   //a2.style.display="none"; 

 i=i+1;
}

 if(i==1){
    //a2.style.display="none";
     //b.setAttribute("style","margin-top:10px;"); //este si funciona
  }

el bloque de abajo se ejecuta una sola vez con i valiendo cero y no se ejecuta nunca mas, el código de la funcion si se ejecuta cada vez que se llama, e i se ira incrementando

Jorge


Buenas jorge. como puedes apreciar en mi código, yo también declaro la variable de forma global, incluso realice un ejemplo muy similar al tuyo y no me funciono, el valor no esta modificando la variable global, solo se encuentra dentro de la función. lo raro está en que tengo otras variables globales que se modifican dentro de funciones y si sirven, pero esta por más que la rescribo, no funciona. gracias nuevamente

Por adrianjsds

3 de clabLevel



 

chrome

   Página 1 de 1

 

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