zoukankan      html  css  js  c++  java
  • jquery $(document).ready() 与window.onload的区别

    1.执行时间

    window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行。
    $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。

    2.编写个数不同

    window.onload不能同时编写多个,如果有多个window.onload方法,只会执行一个
    $(document).ready()可以同时编写多个,并且都可以得到执行

    3.简化写法

    window.onload没有简化写法
    $(document).ready(function(){})可以简写成$(function(){});

    在我以前的开发中,一般用到javascript,我都是采用jquery的模式,也就是大多数时候,第一行写的是:

    复制代码 代码如下:

    $(document).ready(function(){
    ...
    });

    这个时候,不一定要等所有的js和图片加载完毕,就可以执行一些方法,不过有些时候,必须要等所有的


    元素都加载完毕,才可以执行一些方法的时候,比如说,部分图片或者什么其他方面还没有加载好,这个时候,点击某些按钮,会导致出现意外的情况,这个时候,就

    需要用到:

    复制代码 代码如下:

    $(window).load(function() {
    $("#btn-upload").click(function(){ //比如说:
    uploadPhotos();
    });
    });

    下面是转载的内容,
    用$(window).load(function(){...})而不用body.onload()的几个理由
    首先它们都是在页面所有元素(包括html标签以及引用到得所有图片,Flash等媒体)加载完毕后执行的,这是它们的共同点.

    不用body.Onload()理由1:

    如果我们想同时加载多个函数,我们必须这样写

    <body onload="fn1(),fn2()"></body>看起来极其丑陋,如果用$(window).load()我们可以这样加载多个函数

    复制代码 代码如下:

    $(window).load(function() {
    alert("hello,我是jQuery!");
    });
    $(window).load(function() {
    alert("hello,我也是jQuery");
    });

    这样写它会从上往下执行这两个函数,并且看起来漂亮多了.

    不用body.Onload()理由2:

    用body.Onload()不能够做到js和html完全分离,这是一个很严重的问题.

    另外用$(window).load(function(){...})和body.onload()都存在同样一个问题,因为开始也说到了,它们都需要等到页面的所有内容

    加载完毕才执行,但是如果当网速比较慢的时候,加载一个页面往往需要较长的时间(几秒到十几秒不等,甚至更长...),所以我们经常

    会遇到页面还没有完全加载完毕而用户已经在操作页面了这种情况,这样页面表现出来的效果就跟我们预期的效果不一样了,

    所以在这里我推荐使用$(document).ready(function(){}),或简写为$(function(){}),因为他会在页面的dom元素加载完毕后就执行,

    而无需等到图片或其他媒体下载完毕.

    但是有时候确实我们有需要等到页面的所有东西都加载完后再执行我们想执行的函数,所以是该使用$(window).load(function(){...})还是

    该使用$(function(){})往往需要结合具体需要而作不同的选择.

    最后附上一段在所有DOM元素加载之前执行的jQuery代码

    复制代码 代码如下:

    <script type="text/javascript">
    (function() {
    alert("DOM还没加载哦!");
    })(jQuery)
    </script>

    呵呵,有时候我们也有这个需求!

  • 相关阅读:
    CF 633 E. Binary Table
    BZOJ 4589 Hard Nim
    不走弯路,微信小程序的快速入门?
    如果通过cookies和localStorage取值?
    Airbub 弃用React Native
    如何在登陆注册的时候,实现密码框的小眼睛的显示与与隐藏?
    js 实用封装 点击按钮复制到剪贴板
    css渐变写法 从左到右渐变三种颜色示例;
    vue-router 使用二级路由去实现子组件的显示和隐藏
    vue 路由传参中刷新页面参数丢失 及传参的几种方式?
  • 原文地址:https://www.cnblogs.com/hmetoer2017/p/6646244.html
Copyright © 2011-2022 走看看