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?
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();
});
.
var links = [];
$(".link").each(function() {
group += 1;
text += 1;
links[group] = [];
links[group][text] = $(this).val();
}
});
var jsonLinks = $.toJSON(links);
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);
Create a closure:
{
var links = [];
$(".link").each(function() {
group += 1;
text += 1;
links[group] = [];
links[group][text] = $(this).val();
}
});
var jsonLinks = $.toJSON(links);
}
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);
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);
}
精彩评论