2009-10-13 12 views
0

J'ai un site construit avec des modèles simples; header.tpl, navigation.tpl, body_home.tpl, body_about.tpl, body_anotherpage.tpl, etc. Le fichier navigation.tpl contient jQuery et est utilisé pour créer dynamiquement un menu de navigation déroulant. Lorsqu'un élément est cliqué sur le premier menu déroulant, le suivant est construit en fonction de l'élément sur lequel vous avez cliqué. À un moment donné, il n'y a plus de liste déroulante et une variable est définie, comme: var action = "dropdowncomplete". Maintenant, dans le corps _ *. Tpl modèles de fichiers, il y a plus de jQuery qui est exécuté lorsque l'action === "dropdowncomplete" évalue à true. Cependant, je ne sais pas comment faire cette vérification avec jQuery (ni avec JS). Voici un morceau simplifiée de code pour illustrer comment cela fonctionne:Vérification de la valeur de la variable JS dans un autre <script> Bloc

/* header.tpl (<head>) - setting this global variable */ 
var action = null; 

/* navigation.tpl - for simplicity's sake, when link is clicked, the var is set */ 
$(document).ready(function() { 
$('a').live('click', function() { 
action = "dropdowncomplete"; 
}); }); 

/* body_*.tpl - this should be executed when the var is set, in this case when a link is clicked */ 
if(action === "dropdowncomplete") { 
// do something 
} 

Notez que tous les 3 morceaux de code JS/jQuery ci-dessus sont en blocs de script séparés!

Merci.

Répondre

5

Je pense que vous êtes sous l'idée erronée que chaque bloc de script > < est un champ distinct. Ce n'est pas. Si votre exemple de code ci-dessus est un reflet exact de votre code actuel, cela devrait fonctionner, car action est déclaré globalement, donc l'affectation change le global et le test vérifie le global.

Si cela ne fonctionne pas, c'est probablement parce que vous avez établi une autre portée non montrée ci-dessus, comme mettre le bit var action = null dans une fonction.

+0

Sachant que c'était probablement un bug, je suis passé par le code à quelques reprises et j'ai trouvé un "bug" dans le code. Les liens ont des informations dans l'attribut href qui est utilisé pour générer le menu déroulant suivant (ils contiennent des informations comme foo = bar qui est passé à un script avec AJAX) donc je dois utiliser "return false" dans le fichier navigation.tpl à la fin de $ ('a'). live ('click', function() {}); bloquer pour empêcher le lien de rediriger vers cette URL et que cette ligne brise l'exécution du code et ainsi les blocs de script suivants ne sont pas exécutés. Maintenant j'ai besoin d'une solution de contournement pour ce problème. – TheMagician

+0

Meilleur postez-le comme une question distincte. Celui-ci a répondu. :) –

0

Je voudrais utiliser une entrée cachée dans mon html pour stocker la valeur

+1

ou même d'utiliser $ .data() si vous utilisez jQuery - http://docs.jquery.com/Internals/jQuery.data –

Questions connexes