Variable javascript globale dans le document.prêt
Quelle est la bonne façon de déclarer une variable JavaScript globale? La façon dont je l'essaie, ne fonctionne pas
$(document).ready(function() {
var intro;
if ($('.intro_check').is(':checked')) {
intro = true;
$('.intro').wrap('<div class="disabled"></div>');
};
$('.intro_check').change(function(){
if(this.checked) {
intro = false;
$('.enabled').removeClass('enabled').addClass('disabled');
} else {
intro = true;
if($('.intro').exists()) {
$('.disabled').removeClass('disabled').addClass('enabled');
} else {
$('.intro').wrap('<div class="disabled"></div>');
}
}
});
});
console.log(intro);
8 réponses
Si vous déclarez une variable globale, vous pouvez utiliser un espace de noms quelconque. Déclarez simplement l'espace de noms à l'extérieur, puis vous pouvez y jeter tout ce que vous voulez. Pareil...
var MyProject = {};
$(document).ready(function() {
MyProject.intro = "";
MyProject.intro = "something";
});
console.log(MyProject.intro); // "something"
Déclarez ceci
var intro;
En dehors de $(document).ready()
parce que, {[5] } cachera votre variable de la portée globale.
Code
var intro;
$(document).ready(function() {
if ($('.intro_check').is(':checked')) {
intro = true;
$('.intro').wrap('<div class="disabled"></div>');
};
$('.intro_check').change(function(){
if(this.checked) {
intro = false;
$('.enabled').removeClass('enabled').addClass('disabled');
} else {
intro = true;
if($('.intro').exists()) {
$('.disabled').removeClass('disabled').addClass('enabled');
} else {
$('.intro').wrap('<div class="disabled"></div>');
}
}
});
});
Selon @Zakaria commentaire
Une Autre façon:
window.intro = undefined;
$(document).ready(function() {
if ($('.intro_check').is(':checked')) {
window.intro = true;
$('.intro').wrap('<div class="disabled"></div>');
};
$('.intro_check').change(function(){
if(this.checked) {
window.intro = false;
$('.enabled').removeClass('enabled').addClass('disabled');
} else {
window.intro = true;
if($('.intro').exists()) {
$('.disabled').removeClass('disabled').addClass('enabled');
} else {
$('.intro').wrap('<div class="disabled"></div>');
}
}
});
});
Note
console.log(intro);
En dehors de la fonction Dom ready (Actuellement vous avez) se connectera undefined
, mais dans DOM ready il vous donnera true / false.
Votre console.log
externe s'exécute avant L'exécution DOM ready, car DOM ready s'exécute après tout la ressource est apparue à DOM, c'est-à-dire après la préparation de DOM, donc je pense que vous obtiendrez toujours un résultat absurde.
Selon le commentaire de @ W0rldart
Je dois l'utiliser en dehors de la fonction Dom ready
, Vous pouvez utiliser l'approche suivante:
var intro = undefined;
$(document).ready(function() {
if ($('.intro_check').is(':checked')) {
intro = true;
introCheck();
$('.intro').wrap('<div class="disabled"></div>');
};
$('.intro_check').change(function() {
if (this.checked) {
intro = true;
} else {
intro = false;
}
introCheck();
});
});
function introCheck() {
console.log(intro);
}
Après avoir changé la valeur de intro
j'ai appelé une fonction qui se déclenchera avec une nouvelle valeur de intro
.
JavaScript a une portée variableau niveau de la fonction , ce qui signifie que vous devrez déclarer votre variable en dehors de la fonction $(document).ready()
.
Ou alternativement pour que votre variable ait Global scope, n'utilisez simplement pas var
mot-clé avant comme indiqué ci-dessous. Cependant, en général, cela est considéré comme une mauvaise pratique car cela pollue la portée globale mais c'est à vous de décider.
$(document).ready(function() {
intro = null; // it is in global scope now
Pour en savoir plus, consultez sortie:
Comme ceci: mettez intro
en dehors de votre document prêt, bonne discussion ici: http://forum.jquery.com/topic/how-do-i-declare-a-global-variable-in-jquery @thecodeparadox est incroyablement rapide: P de toute façon!
var intro;
$(document).ready(function() {
if ($('.intro_check').is(':checked')) {
intro = true;
$('.intro').wrap('<div class="disabled"></div>');
};
$('.intro_check').change(function(){
if(this.checked) {
intro = false;
$('.enabled').removeClass('enabled').addClass('disabled');
} else {
intro = true;
if($('.intro').exists()) {
$('.disabled').removeClass('disabled').addClass('enabled');
} else {
$('.intro').wrap('<div class="disabled"></div>');
}
}
});
});
Contrairement à d'autres langages de programmation, toute variable déclarée en dehors d'une fonction devient automatiquement globale,
<script>
//declare global variable
var __foo = '123';
function __test(){
//__foo is global and visible here
alert(__foo);
}
//so, it will alert '123'
__test();
</script>
Votre problème est que vous déclarez variable à l'intérieur ready()
Fonction, ce qui signifie qu'il devient visible (dans la portée) seulement à l'intérieur ready()
fonction, mais pas à l'extérieur,
Solution:
Donc, il suffit de le rendre global, c'est-à-dire déclarer celui-ci à l'extérieur $(document).ready(function(){});
Utilisez window.intro = "value";
dans la fonction ready. "value"
peut être void 0
si vous voulez qu'il soit undefined
Vous pouvez définir la variable dans la fonction document ready sans var pour en faire une variable globale. En javascript toute variable déclarée sans var devient automatiquement une variable globale
$(document).ready(function() {
intro = "something";
});
Bien que vous ne puissiez pas utiliser la variable immédiatement, mais elle serait accessible à d'autres fonctions