2011-11-04 16 views
5
1| <script type="text/javascript"> 
2| function more() { 
3|   $("#innerSub2").animate({ scrollTop: "+=240px" },1000); 
4|   var count = 1; 
5|   document.getElementById("dot" +count).style.color="#c7c9e9"; 
6|   var count = count + 1; 
7|   document.getElementById("dot" +count).style.color="#6464c1"; 
8|  } 
9|  </script> 

Helo, soy bastante nuevo en javascript. Lo siento si esta es una pregunta estúpida.
En el primer clic, la variable funciona como la necesito (línea 5, recuento = 1) (línea 7, recuento = 2)
Pero en el segundo clic, necesito el evento (línea 5, recuento = 2) (línea 7, count = 3) pero como puede ver, se restablece a 1 con la línea 4.
Entonces la pregunta es, ¿cómo puedo declarar | var count = 1; | fuera de la función más() por lo que no restablecerá mi variable? o si hay alguna otra manera de hacer esto ..
También si hay una manera de detener el recuento variable superior a 3, por favor comparten
Gracias¿Variable de Javascript fuera de la función?

Respuesta

3

Se puede definir una variable fuera de su función, así que no lo puedo borrar, de esta manera el alcance de la variable será global, habiendo una gran cantidad de variables globales se considera que no es una buena práctica se puede aprender más sobre el alcance y JavaScript/conceptos básicos de jQuery en este libro http://jqfundamentals.com/book/index.html#example-2.44

<script type="text/javascript"> 
    var count = 1; 
    function more() { 
     $("#innerSub2").animate({ scrollTop: "+=240px" },1000);   
     document.getElementById("dot" +count).style.color="#c7c9e9"; 
     count = count + 1; //removed the var word. 
     document.getElementById("dot" +count).style.color="#6464c1"; 
     } 
</script> 
+2

Probablemente sea mejor ajustar el código en una función autoejecutable para evitar la contaminación global. Otra alternativa sería definir 'move.count = 1' en lugar de count, y solo el trabajo de la variable global' more() 'ya definida. – William

+0

¡Gracias! Intenté poner "var count = 1"; función anterior pero dentro de la función tenía "var count = count + 1;" es por eso que no estaba funcionando. sacar a "var" hizo el truco. Gracias chicos – iamruskie

+0

¡Me alegro de que funcionó! No dejes de aprender que el libro que compartí contigo es realmente útil para aprender los conceptos básicos, por favor eche un vistazo y, por favor, marque esta pregunta como una respuesta, como dicen las reglas del sitio http: // stackoverflow.com/faq # howtoask "Esto le permite a otras personas saber que ha recibido una buena respuesta a su pregunta. Hacer esto es útil porque muestra a otras personas que usted está obteniendo un valor de la comunidad. (Y si no lo hace) , la gente con frecuencia te pedirá cortésmente que regreses y aceptes las respuestas para más de tus preguntas.) " – ElHacker

0

Exactamente cómo escribió

var count = 1; 
    function more() { 
      $("#innerSub2").animate({ scrollTop: "+=240px" },1000); 
      document.getElementById("dot" +count).style.color="#c7c9e9"; 
      count = (count>2)?3:(count+1); 
      document.getElementById("dot" +count).style.color="#6464c1"; 
    } 
0
var count = 1; 
function more(count) { 
      $("#innerSub2").animate({ scrollTop: "+=240px" },1000); 
      document.getElementById("dot" +count).style.color="#c7c9e9"; 

      if(count < 3) 
       count += 1; 

      document.getElementById("dot" +count).style.color="#6464c1"; 

      return count; 
    } 



    then you just call more(count) on some event. 
+1

solo por curiosidad, ¿por qué mezclar jquery y straight js? document.getElementById ("dot" + count) .style.color = "# c7c9e9"; debería ser solo $ ('# dot' + count) .css ('color', 'c7c9e9') –

0

Desde el var es función de su interior, y que está poniendo a = 1, será siempre 'reset' a 1. Lo que hay que hacer es:

var count = 1; 
function more(){ 
    //js stuff animate 
    count = count+1; 
    //other js css 
    count = count+1; 
    //another js color 
} 

Ésta es la utilización de su estructura. ¿Desea dejar de contar después de 3, pero aún las otras js funcionan o js deja de funcionar también? Permite hacer ambos como ejemplo. 3, pero todavía funcionan JS:

var count = 1; 
function more(){ 
    //js stuff animate 
    if(count<3){count = count+1;} 
    //other js css 
    if(count<3){count = count+1;} 
    //another js color 
} 

si desea que todo deja de funcionar,:

var count = 1; 
function more(){ 
    if(count<3){ 
     //js stuff animate 
     count = count+1; 
     //other js css 
     count = count+1; 
     //another js color 
    } 
} 

Hay mejor forma de presentar pero utilicé su estructura de código por lo que podría entender mejor.

Si alguna vez necesita restablecer el conteo en la misma página, dado que la var está fuera de la función, es una var global para que otras funciones puedan acceder/modificar. Por ej.

function resetCount(){ 
    count = 1; 
} 
0

Además, para agregar a la respuesta de Syred, debe poner algo de error en la comprobación de las llamadas al objeto DOM. Por ejemplo:

<script type="text/javascript"> 
    var count = 1; 
    function more() { 
     $("#innerSub2").animate({ scrollTop: "+=240px" },1000); 
     if (document.getElementById("dot" + count) != null) { 
      document.getElementById("dot" +count).style.color="#c7c9e9"; 
      count = count + 1; //removed the var word. (could also use count++) 
      if (document.getElementById("dot" + count) != null) 
       document.getElementById("dot" +count).style.color="#6464c1"; 
     } 
    } 
</script> 

Si supiera más sobre la forma en que estaba utilizando la función, que podría hacer otras recomendaciones sobre la manera de simplificar y comprobar si hay errores, pero esto debe darle una buena idea.

Cuestiones relacionadas