Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在函数外部传递变量。JQuery_Javascript_Jquery_Function - Fatal编程技术网

Javascript 在函数外部传递变量。JQuery

Javascript 在函数外部传递变量。JQuery,javascript,jquery,function,Javascript,Jquery,Function,我试图将变量checkBoxClasses传递到当前函数之外 var checkBoxClasses; $(currentMap).find(':checkbox').filter(':checked').each(function () { var b = $(this).attr('class').split(' '); checkBoxClasses = b[0]; }); alert(checkBoxClasses); 我该怎么做 $(currentMap).find('

我试图将
变量
checkBoxClasses
传递到当前函数之外

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

alert(checkBoxClasses);
我该怎么做

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

        });

        alert(checkBoxClasses);
为什么不:

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

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

            });

   alert(checkBoxClasses);

可以使用一个数组将结果附加到其中:

var classes = new Array();
$(currentMap).find(':checkbox').filter(':checked').each(function () {
    var b = $(this).attr('class').split(' ');
    classes.push(b[0]);
});
alert(classes);
另一种可能是使用更适合您需求的功能:

var classes = $(currentMap).find(':checkbox:checked').map(function () {
    return $(this).attr('class').split(' ')[0];
}).toArray();
alert(classes);

您必须在函数范围之外声明变量,否则该变量将是匿名函数的私有变量

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

alert(checkBoxClasses);

但是,当您在复选框上循环时,如果您这样做,则只有最后一个复选框会发出警报。如果您想对每个复选框执行警报,那么您还必须将警报移动到循环中。或者,如果要在单个通知中通知所有复选框,可以使用数组,或使用每个新复选框扩展字符串,而不是完全替换它。

要从任何范围声明全局变量,应使用window.variable语法:

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

});

这是因为JS变量作用域。更多信息为前

通常,变量不能在其定义的范围之外使用

这就是为什么这应该起作用

    var checkBoxClasses = [];

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

    alert(checkBoxClasses);

在您的版本中,每个循环内的匿名函数意味着在该函数内定义的变量在该函数外不可见。

在该函数外声明该变量。这样可能会重复,您将只获得最后一个复选框的类。
var checkBoxClasses;
$(currentMap).find(':checkbox').filter(':checked').each(function () {
   var b = $(this).attr('class').split(' ');
   checkBoxClasses = b[0];
});

alert(checkBoxClasses);