2010-10-21 4 views
1

J'ai cherché pendant environ une heure à essayer de glaner tout ce que je pouvais sur la portée variable dans jscript/jquery et par tous les comptes, mon code devrait fonctionner. En ce moment je veux juste pouvoir lire une variable globale d'une fonction. Mon code ne fonctionne pas et c'est très basique. Finalement, je vais devoir manipuler la variable globale, mais une étape à la fois ici:jQuery: Notions de base - Portée de la variable Problème

var fooBar; 
fooBar = "blah"; 

$('.var').click(function (fooBar) { 
    alert(fooBar); 
}); 

HTML:

<span class="var">(Button Test)</span>

Il retourne [objet objet] dans la zone d'alerte. J'espérais vraiment que ça rendrait Blah pour moi. Je sais que c'est une question très fondamentale, mais tous les exemples que je trouve sont assez complexes et il m'est assez difficile d'en arriver à la partie la plus élémentaire dont j'ai besoin. Toute aide est grandement appréciée.

Répondre

5

Vous devez le supprimer comme paramètre, comme ceci:

var fooBar; 
fooBar = "blah"; 

$('.var').click(function() { 
    alert(fooBar); 
}); 

La raison pour laquelle vous voyez [Object object] est que le premier paramètre passé à la fonction (et tout autre gestionnaire d'événements en jQuery) est the jQuery event object et ce paramètre étant nommé le même signifie que dans votre fonction fooBar se réfère à lui, car il est plus local. Votre variable est disponible à l'intérieur, elle est simplement surchargée par une version plus locale actuellement en raison du même nom utilisé ... supprimez-la comme je l'ai fait ci-dessus et vous serez tous ensemble.

+0

Je pensais que j'avais déjà essayé, mais il se pourrait que j'avais plus de code à l'origine de mes erreurs. Je ne comprends toujours pas bien ton explication. Êtes-vous en train de dire que l'événement .click a été passé comme testVar et donc '[Object object]'? – mosquito

+0

@mosquito - le premier paramètre, quel que soit votre nom (habituellement 'e' ou' event'), sera l'objet d'événement 'click' que jquery crée, et quand vous le présentez comme une chaîne, ce que' alert() 'fait, vous obtiendrez '[Object object]'. Cela n'a vraiment rien à voir avec votre précédente variable 'fooBar', elle partageait simplement un nom, donc 'alert()' utilisait une variable entièrement différente avec le même nom parce qu'elle était "plus proche", ou plus locale. –

2

Supprimez le fooBar de la fonction car il crée une variable de portée locale qui sera utilisée plutôt que la variable globale.

$('.var').click(function() { 
    alert(fooBar); 
}); 
0

Vous n'avez pas besoin fooBar dans les paramètres de votre fonction. Cela suffit:

var fooBar; 
fooBar = "blah"; 

$('.var').click(function() { 
    alert(fooBar); 
}); 

Vous avez trop de code, est tout :)

1

Les variables globales en Javascript sont en fait des membres de window, si vous avez un conflit de cadrage avec une variable locale, comme votre paramètre fooBar, vous pouvez qualifier complètement votre variable globale fooBar comme ceci:

var fooBar; 
fooBar = "blah"; 

$('.var').click(function (fooBar) { 
    alert(window.fooBar); 
}); 

En fait, je fais un point pour se qualifier toujours pleinement les variables globales avec window afin pour éviter toute confusion ou conflit. En effet, je voudrais écrire le tout comme ceci:

window.fooBar = "blah"; 

$('.var').click(function (fooBar) { 
    alert(window.fooBar); 
});