jQuery html()无法完成

时间:2017-08-25 20:48:15

标签: javascript jquery html

我有一个实用程序函数将HTML插入div,然后调用一个javascript初始化函数,它将事件处理程序附加到插入的HTML中的各个元素。这些函数适用于90%的情况,但在下面的jquery html()调用中定期失败。如果失败,则正确插入HTML,但永远不会到达下一行的代码。

 function loadSection(id, url, initializer = null, param = null) {
        const $div = $('#' + id);
        return $.ajax({
            method: 'GET',
            url: url,
        })
            .done(function (html) {
                $div.html(html);
                if (initializer) { // This line is never reached.
                    initializer(param);
                }
            });
    }

如果我使用$ div.empty()。append(html)而不是$ div.html(html),则会出现同样的故障,因此问题不在html()函数本身中。实际上,如果我单步执行html()代码,它会执行this.empty()。append(value)并且永远不会返回调用函数。

插入的html可能包含设置变量值但不直接调用任何javascript函数。

我已经对StackOverflow和网络进行了相当详尽的搜索但是空洞了。我也通过jQuery代码进行了跟踪,但无法识别问题。谁能告诉我为什么会失败?

回答一些问题:

  • 这是确定性的。失败案例总是失败,反之亦然。

  • 我知道代码成功了,因为代码执行到了$ div.html(html)。 GET中返回的html是正确的。

  • 如何调用它的示例:

    function loadNewContracts(){ loadSection(' prospector-newContracts',' ../ newContracts',initNewContracts); }

  • 每个部分的初始值设定项都不同。关键点是初始化程序永远不会被调用。

  • 正确的初始化程序IS被传递到函数中并且确实存在。

  • HTML中唯一的标记设置变量值。没有调用js函数。成功的调用也会设置变量值。标签中没有循环。

  • 所有情况下都存在$ div变量。

1 个答案:

答案 0 :(得分:0)

巴马尔很接近,让我想出了这个。在html中设置的js变量是在jinja2模板中生成的。一个不存在的值被传递给模板,因此脚本最终看起来像......

var currentValue = ;

...所以js在加载html时失败了。另一个以类似的方式失败了。由于最近在服务器代码中引入了错误,这些失败了。

回想起来很明显,但我忽略了它,因为你不能打破js中的js。谢谢,Barmar!