在javascript函数中传递对象-对象未定义
我正在将对象传递给另一个函数,但得到了“Obj未定义错误”。我从这里提到 HTML:在javascript函数中传递对象-对象未定义,javascript,jquery,html,Javascript,Jquery,Html,我正在将对象传递给另一个函数,但得到了“Obj未定义错误”。我从这里提到 HTML: window.onload=函数(){ 展示文件夹([{ “folderName”:“eod余额汇总表”, “对象”:[{ “keyName”:“eod-balance-formatted-2014-06-01.csv”, “keyValue”:“eod余额汇总/eod-balance-FORMATED-2014-06-01.csv” }], “childDirs”:[] }, { “folderName”:
window.onload=函数(){
展示文件夹([{
“folderName”:“eod余额汇总表”,
“对象”:[{
“keyName”:“eod-balance-formatted-2014-06-01.csv”,
“keyValue”:“eod余额汇总/eod-balance-FORMATED-2014-06-01.csv”
}],
“childDirs”:[]
}, {
“folderName”:“对账活动摘要”,
“对象”:[{
“关键字名称”:“recon-summary-2014-04-01-2014-04-02.csv”,
“keyValue”:“对账活动摘要/recon-summary-2014-04-01-2014-04-02.csv”
}],
“childDirs”:[]
}]);
};
JavaScript:
folderId = 1;
function showFolders(folderList) {
var markup = "";
$("#dispdir").append("<ul>");
for (var i = 0; i < folderList.length; i++) {
var fid = "folder_" + folderId;
markup = "<li id='" + fid + "'>" + folderList[i].folderName + "</li>";
$("#dispdir").append(markup);
$("#" + fid).on("click", function () {
showJson(folderList[i]);
});
folderId += 1;
}
$("#dispdir").append("</ul>");
}
function showJson(Obj) {
alert(Obj.folderName);
}
folderId=1;
函数showFolders(文件夹列表){
var标记=”;
$(“#dispdir”)。追加(“”);
对于(变量i=0;i”+folderList[i]。folderName+“”;
$(“#dispdir”)。附加(标记);
$(“#”+fid)。在(“单击”)上,函数(){
showJson(folderList[i]);
});
folderId+=1;
}
$(“#dispdir”)。追加(“
”);
}
函数showJson(Obj){
警报(对象文件夹名称);
}
由于这行代码,showJson(folderList[i]),所以这行不通代码>
i
的值与folderList.length
的值相同。由于此行是在单击元素时执行的,i
的值已被循环更改。在JavaScript中使用e。因为i
与数组的长度相同,folderList[i]
将是未定义的
。当它被传递到showJson
时,Obj
将是undefined
要解决此问题,只需使用匿名函数包装它
$("#" + fid).on("click",
(function(i){
return function(){
showJson(folderList[i]);
};
})(i)
);
但在中,有块作用域:
for(let i = 0; i < folderList.length; i++){
let j = i;
$("#" + fid).on("click", function(){
showJson(folderList[j]);
});
}
for(设i=0;i
不能在单击函数中使用变量“i”。因为当你点击一个div元素时,我最终更新了值,即2,因为你的数组有2个元素。因此,将数据设置为元素本身,并在稍后单击该元素时检索该数据。例如:
function showFolders( folderList ) {
$("#dispdir").append("<ul>");
for ( var i = 0; i < folderList.length; i++ ) {
var fid = "folder_"+folderId;
var markup = $("<li id='" + fid + "'>" + folderList[i].folderName + "</li>");
$(markup).attr("metadata",folderList[i].folderName);
$("#dispdir").append(markup);
$(markup).click(function(){
showJson($(this));
});
folderId += 1;
}
$("#dispdir").append("</ul>");
}
function showJson( Obj ) {
alert($(Obj).attr("metadata"));
}
函数显示文件夹(文件夹列表){
$(“#dispdir”)。追加(“”);
对于(变量i=0;i”+folderList[i].folderName+“”);
$(标记).attr(“元数据”,folderList[i].folderName);
$(“#dispdir”)。附加(标记);
$(标记)。单击(函数(){
showJson($(this));
});
folderId+=1;
}
$(“#dispdir”)。追加(“
”);
}
函数showJson(Obj){
警报($(Obj.attr(“元数据”));
}
JSON在哪里?你没有任何JSON,你有一个数组。它不需要解析…对我来说,代码似乎在你的小提琴上运行得很好。它在小提琴上运行。看,HTML代码被作为一个参数发送。他说他提到小提琴。。。我认为这不是他的小提琴你有语法错误,在你的第一个代码,请修复这只是添加“}”之前”)(I);第6行你的代码,这将工作“呃let
仍然存在与示例中的var
相同的问题。。。例如,在Firefox中打开以查看问题:
function showFolders( folderList ) {
$("#dispdir").append("<ul>");
for ( var i = 0; i < folderList.length; i++ ) {
var fid = "folder_"+folderId;
var markup = $("<li id='" + fid + "'>" + folderList[i].folderName + "</li>");
$(markup).attr("metadata",folderList[i].folderName);
$("#dispdir").append(markup);
$(markup).click(function(){
showJson($(this));
});
folderId += 1;
}
$("#dispdir").append("</ul>");
}
function showJson( Obj ) {
alert($(Obj).attr("metadata"));
}