2012-01-04 58 views
2

我想通过当前函数之外的variablecheckBoxClasses传递函数外的变量。 JQuery

我该怎么做?

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

     }); 

     alert(checkBoxClasses); 
+0

然后声明该函数以外的变量。 – 2012-01-04 10:36:14

+0

可能的重复[如何访问此jquery循环以外的此变量?](http://stackoverflow.com/questions/5549312/how-do-i-access-this-variable-outside-of-this-jquery -loop) – 2012-01-04 10:37:31

回答

3

这是因为JS的变量范围。更多信息ex。 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); 

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

+0

+1推是我正在寻找。谢谢! – 2012-01-04 10:46:08

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); 
+1

这样您将只获得最后一个复选框的类。 – 2012-01-04 10:39:43

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); 
2

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

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

alert(checkBoxClasses); 

然而,当你遍历复选框,只有最后一个复选框将被警告,如果你做这种方式。如果您希望为每个复选框执行警报,则还必须将警报移至循环中。或者,如果您希望在单个警报中提醒所有复选框,则可以使用数组,也可以使用每个新复选框扩展字符串,而不是完全替换它。

0

对于来自任何范围内声明全局变量,你应该使用window.variable语法:

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

});