Переменные JavaScript не распознаются в скрипте - PullRequest
0 голосов
/ 07 января 2012

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

 $(document).ready(function(){
    $(".box").click(function(e){
    var newvar = ("#" + $(this).attr("id") + "Contact");

        alignPop();

    if(status==0){
        $("#popBG").css({
        "opacity": "0.5"
        });
        $("#popBG").fadeIn("slow");
        $(newvar).fadeIn("slow");
        popupStatus = 1;
    }

Теперь, пока все работает как часы, но когдаскрипт запускает функцию alignPop (), которая определена вне скобок функции click, он не распознает вновь определенную переменную newvar.Сценарий будет продолжать что-то вроде:

function alignPop(){
    var popH = $(newvar).height();
    var popW = $(newvar).width();

Почему сценарий не распознает переменную позже в сценарии?Может быть, потому, что весь скрипт загружается сразу, до того, как переменная будет определена?Есть ли способы обойти это?

Спасибо, и, пожалуйста, сохраните ответ на простом английском, так как я новичок в этом!

Ответы [ 2 ]

1 голос
/ 07 января 2012

«Почему сценарий не распознает переменную позже в сценарии?»

Поскольку «newvar» не входит в сферу применения функции alignPop.Вам нужно передать эту переменную в качестве аргумента.Попробуйте:

function alignPop(elem){
    var popH = $(elem).height();
    var popW = $(elem).width();
    ...
}

и вызовите эту функцию следующим образом:

alignPop(newvar);

Для лучшей производительности вы можете передать elem как объект jQuery, а не строку.

1 голос
/ 07 января 2012

Переменная неправильно определена.Поскольку он объявлен в функции ready, он содержится в области действия этой функции и не может быть виден в другом месте скрипта.Если вы хотите, вне вашей функции, поместить var newvar;, а внутри функции ready удалить var в строке newvar = ("#" + $(this).attr("id") + "Contact");, вы сможете использовать ее в качестве глобальной переменной.

Код будет выглядеть так:

var newvar;
$(document).ready(function () {
    $(".box").click(function(e){
        newvar = ("#" + $(this).attr("id") + "Contact");
        // ..
...