Quelle est la bonne façon de déclarer une variable javascript globale? La façon dont j'essaye, 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);
Si vous déclarez une variable globale, vous souhaiterez peut-être utiliser un espace de noms d'une certaine sorte. Déclarez simplement l'espace de noms à l'extérieur, puis vous pouvez y ajouter ce que vous voulez. Comme ça...
var MyProject = {};
$(document).ready(function() {
MyProject.intro = "";
MyProject.intro = "something";
});
console.log(MyProject.intro); // "something"
déclarer cela
var intro;
en dehors de $(document).ready()
car, $(document).ready()
masquera 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>');
}
}
});
});
Autrement:
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>');
}
}
});
});
console.log(intro);
en dehors de la fonction DOM ready (vous en avez actuellement) enregistrera undefined
, mais dans DOM ready, cela vous donnera true/false.
console.log
Exécuter extérieur avant DOM prêt à exécuter, parce que DOM prêt exécuter après que toutes les ressources sont apparues à DOM c'est-à-dire après que DOM est préparé, donc je pense que vous obtiendrez toujours un résultat absurde.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éclenche avec une nouvelle valeur de intro
.
JavaScript a la portée de la variable au niveau de la fonction , ce qui signifie que vous devrez déclarer votre variable en dehors de la fonction $(document).ready()
.
Ou bien pour que votre variable ait une portée globale , n'utilisez simplement pas le mot-clé var
avant comme indiqué ci-dessous. Cependant, en général, cela est considéré comme une mauvaise pratique car cela pollue la portée mondiale mais c'est à vous de décider.
$(document).ready(function() {
intro = null; // it is in global scope now
Pour en savoir plus, consultez:
Utilisez window.intro
À l'intérieur de $(document).ready()
.
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 de toute 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 une variable à l'intérieur de la fonction ready()
, ce qui signifie qu'elle devient visible (dans la portée) UNIQUEMENT à l'intérieur de la fonction ready()
, mais pas à l'extérieur,
Solution: il suffit donc de le rendre global, c'est-à-dire de déclarer celui-ci en dehors de $(document).ready(function(){});
Vous pouvez définir la variable à l'intérieur de la fonction prête pour le document 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
Utilisation window.intro = "value";
à l'intérieur de la fonction prête. "value"
pourrait être void 0
si vous voulez que ce soit undefined