Reputation: 79826
i have this code:
$(".link").each(function() {
group += 1;
text += 1;
var links = [];
links[group] = [];
links[group][text] = $(this).val();
}
});
var jsonLinks = $.toJSON(links);
after it has looped every .link it will exit the each loop and encode the array 'links' to json. but the array 'links' is a local variable inside the each-loop. how can i make it global outside the loop?
Upvotes: 3
Views: 367
Reputation: 6618
JavaScript only understand two scopes
Global: Which is any variable outside the function and variables declare without the var
Function : Anything which is inside the function.
So i will suggest you the closure approach as follows
function getJSONLinks()
{
var links = [];
$(".link").each(function() {
group += 1;
text += 1;
links[group] = [];
links[group][text] = $(this).val();
}
});
return $.toJSON(links);
}
Upvotes: 0
Reputation: 12922
To define a global variable, you can either
a) define the variable outside of a function (as already mentioned in other answers)
or
b) attache the variable to the window object
$(".link").each(function() {
group += 1;
text += 1;
window.links = [];
links[group] = [];
links[group][text] = $(this).val();
}
});
var jsonLinks = $.toJSON(links);
or
c) create a variable without the var keyword
$(".link").each(function() {
group += 1;
text += 1;
links = [];
links[group] = [];
links[group][text] = $(this).val();
}
});
var jsonLinks = $.toJSON(links);
Upvotes: 0
Reputation: 625397
Define links
outside the loop:
var links = [];
$(".link").each(function() {
group += 1;
text += 1;
links[group] = [];
links[group][text] = $(this).val();
});
var jsonLinks = $.toJSON(links);
I should also point out that this doesn't make a lot of sense because you will end up element 7, for example, being an array with a single element (indexed as 7) to the value. Is this really what you want?
What I imagine you want is an array of the values. If so, why not use map()
?
var links = $(".link").map(function(i, val) {
return $(val).val();
});
Upvotes: 9
Reputation: 104198
Create a closure:
{
var links = [];
$(".link").each(function() {
group += 1;
text += 1;
links[group] = [];
links[group][text] = $(this).val();
}
});
var jsonLinks = $.toJSON(links);
}
Upvotes: 2
Reputation: 18539
Just declare it before your block of code:
var links = [];
$(".link").each(function() {
group += 1;
text += 1;
links[group] = [];
links[group][text] = $(this).val();
}
});
var jsonLinks = $.toJSON(links);
or simply remove 'var':
$(".link").each(function() {
group += 1;
text += 1;
links = [];
links[group] = [];
links[group][text] = $(this).val();
}
});
var jsonLinks = $.toJSON(links);
Upvotes: 2
Reputation: 382881
.
var links = [];
$(".link").each(function() {
group += 1;
text += 1;
links[group] = [];
links[group][text] = $(this).val();
}
});
var jsonLinks = $.toJSON(links);
Upvotes: 2