Почему я не могу увеличить глобальную переменную

Я создал переменную q вне какой-либо функции. Изнутри своей функции я пытаюсь просто увеличить ее с помощью ++. Будет ли это увеличивать глобальное значение q или это просто добавление значения к локальной переменной? Как вы можете видеть в примере кода ниже, я пытаюсь использовать значение глобальной переменной (которую я собираюсь обновлять при каждом выполнении этого скрипта), чтобы установить переменную, которая должна запускать эту функцию через .change. Функция изначально запускается (когда q = 1), однако она не запускается при выборе из раскрывающегося списка с id = "selectedId2", что наводит меня на мысль, что q сохранил значение 1, хотя я успешно увеличил его. когда функция была запущена ранее. Любые советы о том, как я могу увеличивать переменную «q» для каждой итерации этого скрипта, были бы очень признательны.

    if (q === 1) {
        selectedDiv = '#selectId1';
        selectedDiv2 = '#selectId2';
    }
    if (q === 2) {
        selectedDiv = '#selectedId2';
        selectedDiv2 = '#selectedId3';
    }
    if (q === 3) {
        selectedDiv = '#selectedId3';
        selectedDiv2 = '#selectedId4';
    }
    if (q === 4) {
        selectedDiv = '#selectedId4';
        selectedDiv2 = '#selectedId5';
    }
    if (q === 5) {
        selectedDiv = '#selectedId5';
        selectedDiv2 = '#selectedId6';
    }

    $(selectedDiv).change(function () {

        if (q == 1) {
            var pullDownDivs = '#2';
        }
        if (q == 2) {
            var pullDownDivs = '#3';
        }
        if (q == 3) {
            var pullDownDivs = '#4';
        }

        if (dropDownSelectJoined != null) {
            var dropDownSelectJoined = dropDownSelectJoined + ", " + $(selectedDiv).val();
        }
        else {
            var dropDownSelectJoined = $(selectedDiv).val();
        }


        var SelArea = $(selectedDiv).val();
        if (SelArea != 0) {
            var url = '@Url.Action("NetworkSubForm")';
            q++;
            $.post(url, { RemovedAreaId: $('#RemovedAreaId').val(), selectedNetworkId: $('#SelectedNetworkId').val(), dropDownSelectJoined: dropDownSelectJoined },
            function (data) {
                var productDropdown = $(selectedDiv2);
                productDropdown.empty();
                productDropdown.append("<option>-- Select Area --</option>");
                for (var i = 0; i < data.length; i++) {
                    productDropdown.append($('<option></option>').val(data[i].Value).html(data[i].Text));
                }
            });
            $(pullDownDivs).show();
            $(pullDownDivs).html();
        }
        else {
            $(pullDownDivs).hide();
            $(pullDownDivs).html();
        }
    });

person gemini6609    schedule 20.02.2014    source источник
comment
Переменной jQuery не существует. jQuery - это библиотека для манипуляций с dom.   -  person Benjamin Gruenbaum    schedule 21.02.2014
comment
@Benjamin Gruenbaum - Я знаю, что jQuery - это библиотека для манипуляций с dom, я просто пытался лучше указать в заголовке этого сообщения, о чем мой вопрос.   -  person gemini6609    schedule 21.02.2014
comment
Где вы определяете q? Вы можете показать код, который это определяет? Вы переопределили q где-нибудь в функции?   -  person Vivin Paliath    schedule 21.02.2014
comment
@Vivin Я определил var q = 1; (Мне нужно начать с 1) на несколько строк выше в моем коде, но мне не удалось вставить его выше. Я должен был быть более осторожным при создании этого поста.   -  person gemini6609    schedule 21.02.2014


Ответы (1)


Я не знаю, как выглядит остальная часть вашего кода, но вы можете увидеть такое поведение из-за «затенения»:

var q = 0; //global "q"
function handler() {
    var q = 0; //local "q" that shadows the global "q";

    ...
    ...

    q++;
    console.log(q);
}

Повторный вызов handler будет выводить 1 каждый раз, поскольку вы переопределяете локальный q в handler. Однако внешний q остался без изменений. Но если вы сделали это:

var q = 0; //global "q"
function handler() {
    var q = 0; //local "q" that shadows the global "q";

    ...
    ...

    window.q++;
    console.log(window.q);
}

Глобальный q будет обновлен, поскольку вы явно ссылаетесь на него, выполняя window.q.

person Vivin Paliath    schedule 20.02.2014
comment
После повторного просмотра кода я понял, что сделал ДЕЙСТВИТЕЛЬНО ТУТУЮ ошибку, которая, я уверен, является причиной этой проблемы ... Я неправильно написал имена div, которые я установил для своих переменных. то есть: '# selectedId2' должно быть '# selectId2'. Я собираюсь некоторое время смущаться из-за этого. - person gemini6609; 21.02.2014
comment
Вивин, спасибо за помощь. Хотя ваш ответ не был решением этой проблемы, так как он был результатом моей глупости, ваш ответ просветил меня и действительно хорошо ответил на мой вопрос, поэтому я отметил его. - person gemini6609; 21.02.2014