我正在尝试将variable
checkBoxClasses
传递到当前函数之外。
我该怎么做?
$(currentMap).find(':checkbox').filter(':checked').each(function () {
var b = $(this).attr('class').split(' ');
var checkBoxClasses = b[0];
});
alert(checkBoxClasses);
答案 0 :(得分:3)
您可以使用追加结果的数组:
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);
答案 1 :(得分:3)
这是因为JS变量范围。更多信息,例如What is the scope of variables in JavaScript?
通常,变量不能在其定义的范围之外使用。
这就是为什么这应该有效。
var checkBoxClasses = [];
$(currentMap).find(':checkbox').filter(':checked').each(function () {
var b = $(this).attr('class').split(' ');
checkBoxClasses.push(b[0]);
});
alert(checkBoxClasses);
在你的版本中,每个循环中的匿名函数意味着在该函数内定义的变量在该函数之外是不可见的。
答案 2 :(得分:2)
您必须在函数范围之外声明变量,否则该变量将对匿名函数是私有的。
var checkBoxClasses;
$(currentMap).find(':checkbox').filter(':checked').each(function () {
var b = $(this).attr('class').split(' ');
checkBoxClasses = b[0];
});
alert(checkBoxClasses);
但是,当您循环选中复选框时,如果您这样做,则只有最后一个复选框会发出警报。如果您想为每个复选框发出警报,您还必须将警报移动到循环中。或者,如果您想在单个警报中提醒所有复选框,您可以使用数组,或者使用每个新复选框扩展字符串,而不是完全替换它。
答案 3 :(得分:1)
为什么不:
var checkBoxClasses; // "global" variable, outside function
$(currentMap).find(':checkbox').filter(':checked').each(function () {
var b = $(this).attr('class').split(' ');
checkBoxClasses = b[0];
});
alert(checkBoxClasses);
答案 4 :(得分:0)
要从任何范围声明全局变量,您应该使用window.variable语法:
$(currentMap).find(':checkbox').filter(':checked').each(function () {
var b = $(this).attr('class').split(' ');
window.checkBoxClasses = b[0];
});