数据表仅在加载其他脚本后显示

时间:2019-09-18 13:07:44

标签: javascript jquery datatables jquery-chosen

我建立了一个网站(在nodejs中),并且datatables jquery插件有问题。一切正常,但问题在于由于所选插件的某些选择字段,数据表需要很长时间才能加载。我有一个脚本(loadsidebar()),可将数据加载到这些选择中,但datatable仅在loadsidebar()脚本完成时显示。当我删除脚本时,数据表会立即显示。

我尝试了很多日志记录以查找问题的根源,并且发现当我在所选数据脚本之前等待100ms时,表会立即加载。因此,此脚本的某些内容阻止了数据表的加载。这并不是真正的解决方案,因为如果该表花费了超过100ms的时间再次加载,则必须等待脚本完成。

我还尝试在数据表的“ initComplete”调用之后调用所选脚本,但是该表也仅在脚本完成后显示。 我真的不知道在initComplete之后甚至不显示该表时还能尝试什么。

我希望这样做的原因是,在表加载之前会有一个空表显示,当表立即加载时,您并不会真正注意到它,因为它加载速度如此之快。

这是所选的脚本。我认为这并不重要。我只是将文本和值设置为相同的变量并选择是否应该选择。

loadSidebar() {
        var txt = document.createElement("textarea");
        txt.innerHTML = `<%= JSON.stringify(side) %>`;
        var side = JSON.parse(txt.value);
        for(var i = 0; i < Object.keys(side).length; i++) {
            var select = document.getElementsByName(Object.keys(side)[i]);
            for(var j = 0; j < side[Object.keys(side)[i]].side.length; j++) {
                var selected = false;
                if (typeof side[Object.keys(side)[i]].filter !== 'undefined' && side[Object.keys(side)[i]].filter.includes(side[Object.keys(side)[i]].side[j][Object.keys(side)[i]])) { 
                    selected = true;
                }
                var element = document.createElement("option");
                element.textContent = side[Object.keys(side)[i]].side[j][Object.keys(side)[i]];
                element.value = side[Object.keys(side)[i]].side[j][Object.keys(side)[i]];
                element.selected = selected;
                $('#'+Object.keys(side)[i]).append(element);
            }
            $('#'+Object.keys(side)[i]).trigger("chosen:updated");
        }
    }

当调用数据表的initComplete时,该脚本开始:

"initComplete": function(settings, json) {
                //await Sleep(100) <- waits for 100ms, this works
                loadSidebar();
            }

0 个答案:

没有答案