[Jquery]关于$.load()和公共CDN库使用的一些问题

对应问题:

  1、js和jquery无效

  2、点击事件无效

  3、使用$.load()时onload无效

  4、使用$.load()时,公共cdn库无效

 

讨论:

  当A页面中的元素使用jquery的$.load()方法动态加载B页面时,B页面的ready方法会被触发,但是B页面的window.onload方法不会触发。

  比如A中有这样一句话  $('body').load('B.html') ,在body元素中加载了B.html

  写在B.html的ready()方法中的函数会执行,像下面这样:

$(function () {
  alert('正在执行 B.html ready()')
});

  而写在onload中的代码不会被执行,比如下面这段:

window.onload = function (ev) {
  alert('这段代码不会执行 B.html window.onload')
}

 

 

引申:  

  通常情况下,由外部引入js代码  <script src='地址'></script> ,只要写在ready()方法的前面,其中的函数都可以在ready()中调用,就像下面这样:

<script src="js/jquery.min.js"></script>
<script src="js/你的js.js"></script>
<script>
        $(function () {
     fun1() //你的js.js中有一个方法叫fun1()
        });
</script>

  上面这段函数,在ready()方法之前,引入了“你的js.js”这个外部js,而这个外部js的函数fun1()在ready()中可以正常调用。

 

  如果此时引入的不是本地的"你的js.js",而是一个公共CDN库的js文件,比如七牛云的公共CDN,像下面这样:

<script src="js/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/cdn库的js.js"></script>
<script>
    $(function () {
        fun1() //fun1是"cdn库的js.js"中的一个函数
    });
</script> 

  此时fun1()还是可以成功执行,因为ready()会等待“cdn库的js.js”文件加载完成后再执行。

  但是如果上面这段代码写在B页面,而B页面是通过A页面的$.load()方法被动态载入的,B页面的ready()方法就不会等待一个"非本域名"的js文件加载完成。也就是在执行B页面的ready()方法时,fun1()所在的js还没有加载,会报fun1 is not define这个错误。

  如果不使用公共cdn或者类似oss这种加速访问方式,保持所用到的js和网站在同一域名下,则不会出现这个问题。

  window.onload()方法实在全部内容加载完毕后调用,但是前面提到,被$.load()方法加载的页面是不会触发window.onload()方法的,所以如果想使用公共CDN或者OSS等服务加快访问速度,又需要通过$.load()方法引入一个B页面,那么B的ready()方法中所调用的方法,要么必须在A页面引入。   

  

  

posted @ 2019-05-06 21:44  真中合欢  阅读(332)  评论(0编辑  收藏  举报