2012-01-04 82 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]; 

});