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

时间:2020-09-11 16:42:55

标签: javascript sharepoint

我对此并不陌生,将不胜感激。所以我对Sharepoint列表有要求。当任何任务过期时,我需要为列上色。我有一个Datetime列,它是sharepoint中的一个计算字段,还有一个Status列,它是一个下拉菜单, 我正在使用以下代码

<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>

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

当我再次加载列表时-如果符合条件,它会很好地工作,并且将字段着色为黄色。为什么我会收到此异常。

1 个答案:

答案 0 :(得分:0)

如果这与我在第二页上遇到的问题相同,我相信 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";
}