在javascript函数中传递对象-对象未定义

在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”:

我正在将对象传递给另一个函数,但得到了“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”:“对账活动摘要”,
“对象”:[{
“关键字名称”:“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"));   
}