Chrome说“无法读取未定义的属性”......即使它确实如此

时间:2012-11-21 23:08:48

标签: jquery arrays google-chrome object undefined

不知道发生了什么。

从$ .ajax成功消息中获取对象,将它们存储在新数组中以传递给插件,插件使用数据但报告不能在我上面的标题中使用属性“ID”。

在for循环结束时停止并指向控制台中for循环的第一行。它克隆了数据和一切。在工作之后什么都没有。

$ .ajax()

中的代码段
var suppliers = [];
for(var i=0; i<5; i++){
    suppliers[i] = msg.d[i];
}
$.fn.appendSnapshots(suppliers);

失败的地方

$.fn.appendSnapshots = function(snapshots) {
var accumulatedHeight = $("#suppliersTable").height();
var IDsShowing = new Array();

for (var i=0; i<snapshots.length; i++){

    if($("#supplierStatusDataRow\\." + snapshots[i].ID).length == 0){

        var $supplierStatusDataRow = $("#supplierStatusDataRow").clone(false)
        $supplierStatusDataRow.css('z-index', 1);
        $supplierStatusDataRow.find("*[id]").andSelf().each(function() { $(this).attr("id", $(this).attr("id") + "." + snapshots[i].ID); });

        $("#supplierStatusDataDiv").append($supplierStatusDataRow);

        $("#statusSupplierName\\." + snapshots[i].ID).append(snapshots[i].SupplierName);
        $("#statusSupplierNumber\\." + snapshots[i].ID).append(snapshots[i].SupplierNumber);
        $("#statusHostNumber\\." + snapshots[i].ID).append(snapshots[i].HostNumber);
        $("#statusSupplierType\\." + snapshots[i].ID).append(snapshots[i].SupplierType);
        $("#statusRecievedReportStatus\\." + snapshots[i].ID).append(snapshots[i].RecievedReportStatus);
        $("#statusBarCode\\." + snapshots[i].ID).append(snapshots[i].BarCode);
        $("#statusNumberOfUsers\\." + snapshots[i].ID).append(snapshots[i].NumberOfUsers);
        $("#statusOnBoardStatus\\." + snapshots[i].ID).append(snapshots[i].OnBoardStatus);
        $("#statusSupplierEmail\\." + snapshots[i].ID).append(snapshots[i].SupplierEmail);
        $("#statusPrimaryBuyer\\." + snapshots[i].ID).append(snapshots[i].PrimaryBuyer);
        $("#statusLastPODate\\." + snapshots[i].ID).append(snapshots[i].LastPODate);
        $("#statusPOMTD\\." + snapshots[i].ID).append(snapshots[i].POMTD);
        $("#statusPOYTD\\." + snapshots[i].ID).append(snapshots[i].POYTD);

        $supplierStatusDataRow.css('top', accumulatedHeight);

        $supplierStatusDataRow.animate({opacity: 1}, 500);

        }
        else{
            $("#supplierStatusDataRow\\." + snapshots[i].ID).animate({top: accumulatedHeight}, 500);
        }

        IDsShowing.push(parseInt(snapshots[i].ID));
        accumulatedHeight += $("#supplierStatusDataRow\\." + snapshots[i].ID).height() - 1;

    }

        $("#supplierStatusDataDiv").find('[id^="supplierStatusDataRow\\."]').each(function(i){ 
        var splitID = $(this).attr("id").split(".");
        if($.inArray(parseInt(splitID[1]), IDsShowing) == -1){
                $("#supplierStatusDataDiv").find('[id^="supplierStatusDataRow\\.' + splitID[1] + '"]').animate(
                    {opacity: 0}, 
                    500, 
                    function() { $("#supplierStatusDataRow\\." + splitID[1]).remove();
                });
            }
        });

        totalHeight = $("#supplierStatusRadioDiv").height() + $("#supplierStatusNameDiv").height() + $("#supplierStatusSlider").height() + accumulatedHeight;
        $("#suppliersSnapshot").animate({height: totalHeight}, 500);
        $("#supplierStatusDataDiv").animate({height: accumulatedHeight}, 500);
    }

1 个答案:

答案 0 :(得分:2)

听起来好像是在for循环中看过数组的末尾。尝试:

for(var i=0; i< msg.d.length; i++){
    suppliers[i] = msg.d[i];
}