开发者问题收集

获取异常 - TypeError:无法读取 null 的属性“style”TypeError:

2020-09-11
478

我是这方面的新手,如果能得到任何帮助,我将不胜感激。因此,我在 Sharepoint 列表中有一个要求。当任何任务逾期时,我需要为列着色。我有一个日期时间列,它是 SharePoint 中的计算字段,还有一个状态列,它是一个下拉列表 - 我正在使用以下代码

<script type="text/javascript">
SP.SOD.executeFunc("clienttemplates.js", "SPClientTemplates", function() {
    SPClientTemplates.TemplateManager.RegisterTemplateOverrides({
        OnPostRender: function(ctx) {
            var today = new Date();
            var rows = ctx.ListData.Row;
            for (var i=0;i<rows.length;i++){
                var status = rows[i]["Status"];
                var dateDue= new Date(rows[i]["DateTime"]);
                var rowId = GenerateIIDForListItem(ctx, rows[i]);
                var row = document.getElementById(rowId);
                if(dateDue<today&&status!="Complete"){
                    row.style.backgroundColor = "yellow";
                }
            }
        }
    });
});
</script>

现在,当我编辑 SharePoint 列表中任何项目中的日期或状态字段时。我收到以下异常 TypeError:无法读取 null 的属性“style” TypeError:无法读取 null 的属性“style”TypeError:无法读取 null 的属性“_events”

当我再次加载列表时 - 它工作正常,如果满足条件,它会将字段颜色为黄色。为什么我会收到此异常。

1个回答

如果这是我遇到的同一问题(仅发生在第二页),我相信 SharePoint 正在提取未显示但脚本正在读取的信息。

在 if 语句之前添加空行过滤器可让脚本运行,而无需尝试将样式应用于未呈现的行。您可以将其与现有 if 语句中的 && 结合使用。

选项 1:

if (row != null) {
    if(dateDue<today&&status!="Complete"){
        row.style.backgroundColor = "yellow";
    }
}

选项 2:

if(dateDue<today&&status!="Complete"&&row!=null){
    row.style.backgroundColor = "yellow";
}
MGaines
2021-05-24