Передайте переменную вне функции.JQuery - PullRequest
2 голосов
/ 04 января 2012

Я пытаюсь передать variable checkBoxClasses вне текущей функции.

Как я могу это сделать?

$(currentMap).find(':checkbox').filter(':checked').each(function () {
            var b = $(this).attr('class').split(' ');
            var checkBoxClasses = b[0];

        });

        alert(checkBoxClasses);

Ответы [ 5 ]

3 голосов
/ 04 января 2012

Это происходит из-за области видимости переменной JS. Больше информации для бывших Какова область видимости переменных в JavaScript?

Как правило, переменная не может использоваться вне области, в которой она определена.

Вот почему это должно работать.

    var checkBoxClasses = [];

    $(currentMap).find(':checkbox').filter(':checked').each(function () {
        var b = $(this).attr('class').split(' ');
        checkBoxClasses.push(b[0]);
    });

    alert(checkBoxClasses);

В вашей версии анонимная функция внутри каждого цикла означает, что переменные, определенные внутри этой функции, не видны вне этой функции.

3 голосов
/ 04 января 2012

Вы можете использовать массив, к которому добавляются результаты:

var classes = new Array();
$(currentMap).find(':checkbox').filter(':checked').each(function () {
    var b = $(this).attr('class').split(' ');
    classes.push(b[0]);
});
alert(classes);

Другая возможность - использовать функцию .map, которая кажется более адаптированной к вашим требованиям:

var classes = $(currentMap).find(':checkbox:checked').map(function () {
    return $(this).attr('class').split(' ')[0];
}).toArray();
alert(classes);
2 голосов
/ 04 января 2012

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

var checkBoxClasses;
$(currentMap).find(':checkbox').filter(':checked').each(function () {
   var b = $(this).attr('class').split(' ');
   checkBoxClasses = b[0];
});

alert(checkBoxClasses);

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

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

Почему бы и нет:

var checkBoxClasses; // "global" variable, outside function

    $(currentMap).find(':checkbox').filter(':checked').each(function () {
                var b = $(this).attr('class').split(' ');
                checkBoxClasses = b[0];

            });

   alert(checkBoxClasses);
0 голосов
/ 04 января 2012

Для объявления глобальных переменных из любой области вы должны использовать синтаксис window.variable:

$(currentMap).find(':checkbox').filter(':checked').each(function () {
            var b = $(this).attr('class').split(' ');
            window.checkBoxClasses = b[0];

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...