繁体   English   中英

document.ready中的全局javascript变量

[英]Global javascript variable inside document.ready

哪种声明全局javascript变量的正确方法? 我正在尝试它的方式不起作用

$(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);

如果要声明全局变量,则可能需要使用某种命名空间。 只需在外部声明命名空间,然后就可以将任何想要的东西扔进去。 像这样...

var MyProject = {};
$(document).ready(function() {
    MyProject.intro = "";

    MyProject.intro = "something";
});

console.log(MyProject.intro); // "something"

宣布这个

var intro;

$(document).ready()$(document).ready()会将变量隐藏在全局范围之外。

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>');
            }
        }
    });
});

据@Zakaria评论

其他方式:

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);

在DOM就绪函数之外(目前你已经)将记录undefined ,但在DOM准备好之前它会给你真/假。

你的外部console.log在DOM就绪执行之前执行,因为DOM准​​备好在所有资源出现在DOM之后执行,即在DOM准备好之后,所以我认为你总是会得到荒谬的结果。


根据@ W0rldart的评论

我需要在DOM就绪函数之外使用它

您可以使用以下方法:

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);
}

在更改了intro的值后,我调用了一个函数,该函数将使用新的intro值触发。

JavaScript具有函数级变量作用域,这意味着您必须在$(document).ready()函数之外声明您的变量。

或者,为了使您的变量具有全局范围,在下面显示之前,不要使用var关键字。 但一般来说,这被认为是不好的做法,因为它污染了全球范围,但由您来决定。

$(document).ready(function() {
   intro = null; // it is in global scope now

要了解有关它的更多信息,请查看:

$(document).ready()使用window.intro

像这样:在你的文件之外准备好intro ,这里的讨论很好: http//forum.jquery.com/topic/how-do-i-declare-a-global-variable-in-jquery @thecodeparadox非常快:P无论如何!

 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>');
            }
        }
    });
});

与其他编程语言不同,在任何函数外声明的任何变量自动变为全局

<script>

//declare global variable
var __foo = '123';

function __test(){
 //__foo is global and visible here
 alert(__foo);
}

//so, it will alert '123'
__test();

</script>

你的问题是你在ready()函数中声明变量,这意味着它只在ready()函数内可见(在范围内ready() ,但不在外面,

解决方案:所以只需将其设为全局,即在$(document).ready(function(){});之外声明它$(document).ready(function(){});

您可以在没有var的文档就绪函数内定义变量,使其成为全局变量。 在javascript中,任何声明没有var的变量都会自动变为全局变量

$(document).ready(function() {
    intro =  "something";
});

虽然你不能立即使用变量,但它可以被其他函数访问

使用window.intro = "value"; 在准备好的功能里面。 如果您希望它undefined"value"可以为void 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM