文档准备好未命中页面加载,但它可以使用开发人员工具控制台

Document ready not hit on page load, but it works using Developer Tools Console

在 Ajax 成功时,li 元素附加到 ul

$.ajax({
           ..
     success: function (response) {
         response.data.forEach(function (x) {
            $("#ulMain").append('<li class="liSub">' + x + '</li>');
     }
});

它创建这样的东西:

<ul>
  <li class="liSub">ABC</li>
  <li class="liSub">BCF</li>
</ul>

我希望动态添加的 li 元素在单击时触发警告框。 但是下面的代码没有被命中。

$(document).ready(function () {
    $(".liSub").on("click", function () {
        alert("Fired");
    });
});

有趣的是,如果我 运行 代码的 document.ready 部分使用 F12 - 控制台,它就可以工作。是什么让它正常停止 运行,并让它通过控制台 运行?

因为它是一个动态加载的元素,尝试委托它:

$(document).ready(function () {
    $("body").on("click",".liSub", function () {
        alert("Fired");
    });
});

您错过了 class 的 . 前缀,并使用 事件委托 创建了动态 dom 元素

$("ul").on("click", '.liSub', function () {
     alert("Fired");
});

这是因为当您的页面准备就绪时,ajax 调用尚未完成。你可以试试这个:

$(document).ready(function () {
    $("#ulMain").on("click",".liSub", function () {
        alert("Fired");
    });
});

它将点击绑定到执行时存在的#ulMain,并在点击时将事件委托给.liSub。它只创建一个绑定,这对全局性能也更好。