javascript - jQuery html() 未完成

标签 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是正确的。

  • 调用方式示例:

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

  • 每个部分的初始化器都不同。关键点是初始化器永远不会被调用。

  • 正确的初始值设定项已传递到函数中并且确实存在。

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

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

最佳答案

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

var currentValue = ;

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

回想起来很明显,但我忽略了它,因为你无法破坏 .谢谢,巴马尔!

关于javascript - jQuery html() 未完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45889202/

相关文章:

javascript - 如何通过类名获取元素值并将它们存储在 jQuery 的数组中?

javascript - 使用 iScroll 将类添加到当前页面

javascript - jQuery - 选择框上的取消选择选项不能正常工作

php - Ajax 聊天系统每秒在控制台发送 XHR Finished Loading

javascript - cgi的start_html()方法可以有多个-script属性吗?

javascript - 1 个 svg 中的多个力导向图(文本显示问题)

javascript - 如何通过 gulp-if 和懒惰管道使用多个管道?

javascript - 一个 Node 模块可以利用它所依赖的 Node 模块的依赖关系吗?

javascript - 更新 Knockoutjs 表

javascript - JS Date 对象 - 返回人类可读的没有时间的字符串