Подтвердить что ты не робот

Глобальная переменная javascript внутри 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);
4b9b3361

Ответ 1

Если вы объявляете глобальную переменную, вы можете использовать какое-либо пространство имен. Просто объявляйте пространство имен снаружи, тогда вы можете бросить все, что захотите. Как это...

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

    MyProject.intro = "something";
});

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

Ответ 2

объявить это

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 он даст вам true/false.

Ваш внешний console.log выполняется перед выполнением DOM, потому что DOM готов выполнить после того, как весь ресурс появился в DOM i.e после того, как 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.

Ответ 3

JavaScript имеет функциональный уровень, что означает, что вам придется объявлять переменную вне функции $(document).ready().

Или альтернативно, чтобы ваша переменная имела область глобальная, просто не используйте ключевое слово var перед тем, как показано ниже. Однако в целом это считается плохой практикой, потому что он загрязняет глобальную область видимости, но вам решать.

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

Чтобы узнать больше об этом, проверьте:

Ответ 4

Используйте window.intro внутри $(document).ready().

Ответ 5

вот так: поставьте 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>');
            }
        }
    });
});

Ответ 6

В отличие от других языков программирования любая переменная, объявленная вне любой функции, автоматически становится глобальной,

<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(), но не снаружи,

Решение: Поэтому просто сделайте его глобальным, а затем объявите это за пределами $(document).ready(function(){});

Ответ 7

Используйте window.intro = "value"; внутри функции готовности. "value" может быть void 0, если вы хотите, чтобы он был undefined

Ответ 8

Вы можете определить переменную внутри функции готовности документа без var, чтобы сделать ее глобальной. В javascript любая переменная, объявленная без var, автоматически становится глобальной переменной

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

хотя вы не можете использовать переменную сразу, но она будет доступна для других функций