我有一个实用程序函数将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变量。
答案 0 :(得分:0)
巴马尔很接近,让我想出了这个。在html中设置的js变量是在jinja2模板中生成的。一个不存在的值被传递给模板,因此脚本最终看起来像......
var currentValue = ;
...所以js在加载html时失败了。另一个以类似的方式失败了。由于最近在服务器代码中引入了错误,这些失败了。
回想起来很明显,但我忽略了它,因为你不能打破js中的js。谢谢,Barmar!