jQuery $.each variable Scope
javascript, jquery
Solution
More or less, exactly what you have now … you just need to pass the data into the function (by letting it accept an argument). See a live example.
var some_function = function(array) {
// false by default
var something = false;
$.each(array, function(key, val) {
if (val == 'something') {
something = true;
}
});
if (something == true) {
alert("There was a something");
} else {
alert("There wasn't a something");
}
};
some_function([1,2,3]);
some_function([1,"something",3]);
Problem
Having a scope issue problem with a `$.each` loop in jQuery. How can I get a global variable in a function to set in a loop or at least pass something out of it? ``` var some_function = function() { // false by default var something = false; $.each(array, function(key, val) { if (val == 'something') { // even if one item evaluates true I need to check outside of the loop something = true; } }); if (something == true) { // do something else, but always false } } ``` Since I'm needing to evaluate all items in the array, and if only one is `true`, then do something additional, outside of the `$.each`. Update ``` $(document).ready(function () { something(); $(':radio').trigger('change'); )}; ``` Ok, so this is the actual code. It's alerting 'false' at the bottom and then alerts 'hello' twice, as if it's going in reverse order. ``` var something = function() { var q_radios = { 'radio1' : 'radio1_selector', 'radio2' : 'radio2_selector', }; var show_me = false; $.each(q_radios, function(name, q_selector) { $('input:radio[name=' + q_selector + ']').change(function() { show_me = true; alert('hello'); }); }); if (show_me == true) { alert('yes'); } else { alert('false'); } }; ```