我有这段代码:
$(".link").each(function() {
group += 1;
text += 1;
var links = [];
links[group] = [];
links[group][text] = $(this).val();
}
});
var jsonLinks = $.toJSON(links);
在循环每个.link之后,它将退出每个循环并将数组'links'编码为json。但是数组'links'是每个循环中的局部变量。如何让它在循环之外变得全球化?
答案 0 :(得分:9)
在循环外定义links
:
var links = [];
$(".link").each(function() {
group += 1;
text += 1;
links[group] = [];
links[group][text] = $(this).val();
});
var jsonLinks = $.toJSON(links);
我还应该指出,这并没有多大意义,因为你将最终得到元素7,例如,作为一个数组,其中包含一个元素(索引为7)。这真的是你想要的吗?
我想你想要的是一系列价值观。如果是这样,为什么不使用map()
?
var links = $(".link").map(function(i, val) {
return $(val).val();
});
答案 1 :(得分:2)
var links = [];
$(".link").each(function() {
group += 1;
text += 1;
links[group] = [];
links[group][text] = $(this).val();
}
});
var jsonLinks = $.toJSON(links);
答案 2 :(得分:2)
只需在代码块之前声明:
var links = [];
$(".link").each(function() {
group += 1;
text += 1;
links[group] = [];
links[group][text] = $(this).val();
}
});
var jsonLinks = $.toJSON(links);
或只是删除'var':
$(".link").each(function() {
group += 1;
text += 1;
links = [];
links[group] = [];
links[group][text] = $(this).val();
}
});
var jsonLinks = $.toJSON(links);
答案 3 :(得分:2)
创建一个闭包:
{
var links = [];
$(".link").each(function() {
group += 1;
text += 1;
links[group] = [];
links[group][text] = $(this).val();
}
});
var jsonLinks = $.toJSON(links);
}
答案 4 :(得分:0)
要定义全局变量,您可以
a)在函数之外定义变量(如其他答案中已提到的)
或
b)将变量附加到窗口对象
$(".link").each(function() {
group += 1;
text += 1;
window.links = [];
links[group] = [];
links[group][text] = $(this).val();
}
});
var jsonLinks = $.toJSON(links);
或
c)创建不带var关键字的变量
$(".link").each(function() {
group += 1;
text += 1;
links = [];
links[group] = [];
links[group][text] = $(this).val();
}
});
var jsonLinks = $.toJSON(links);
答案 5 :(得分:0)
JavaScript只能理解两个范围
全局:除了 var
功能:功能内的任何内容。
所以我建议你关闭方法如下
function getJSONLinks()
{
var links = [];
$(".link").each(function() {
group += 1;
text += 1;
links[group] = [];
links[group][text] = $(this).val();
}
});
return $.toJSON(links);
}