代码之家  ›  专栏  ›  技术社区  ›  dallin

从jquery.loadAjax调用添加到DOM的document.ready事件的预期行为是什么?

  •  0
  • dallin  · 技术社区  · 6 年前

    我有一个网站同时加载多个jqueryui对话框窗口。我使用 JQuery.load ajax call . 这些对话框的内容有时也可以作为单独的网页加载,因此每个对话框都有自己的$(document).ready()函数(或简称为$(function())。我不确定在原始文档完全加载后,当Ajax加载时,$(document).ready()函数应该如何工作。

    我在这里遇到了一些奇怪的功能。出于某种原因,它在document.ready事件中运行代码 当它到达声明的时候 ,就好像它是顺序代码而不是事件分配。例如:

    <script>    
        console.log(1);
    
        $(function () {
            console.log(3);
        }
    
        console.log(2)
    </script>
    

    我认为,由于JS的单线程特性和事件冒泡,它将等待执行,直到全局级脚本完成。换句话说,我希望这是一个输出:

    1
    2
    3
    

    但出于某种原因,它实际上正在输出:

    1
    3
    2
    

    知道为什么会发生这种行为吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Kaiido NickSlash    6 年前

    their function

    1. $.deferred

    window.onload = e => {
      console.log('start of window onload');
      $(()=>console.log('$ready')); // executed synchronously
      console.log('end of window onload');
    };
    <!-- jQuery < 3 -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    window.onload = e => {
      console.log('start of window onload');
      $(()=>console.log('$ready')); // deferred
      console.log('end of window onload');
    };
    <!-- jQuery >= 3 -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>