实现在HTML页面加载完毕后执行某个JS的两种方法

方式一:

window.οnlοad=function(){


var userName="xiaoming";

alert(userName);

}


方式二:
$(document).ready(function(){ 

var userName="xiaoming";

alert(userName);
});
方式二可简写为:
$(function(){ 
var userName="xiaoming"; 
alert(userName); 
});

两种方式的区别:
window.onload:
当一个文档完全下载到浏览器中时,才会触发window.onload事件。这意味着页面上的全部元素对js而言都是可以操作的,也就是说页面上的所有元素加载完毕才会执行。这种情况对编写功能性代码非常有利,因为无需考虑加载的次序。
$(document).ready{ }: 
会在DOM完全就绪并可以使用时调用。虽然这也意味着所有元素对脚本而言都是可以访问的,但是,并不意味着所有关联的文件都已经下载完毕。换句话说,当HMTL下载完成并解析为DOM树之后,代码就会执行。
假设有一个表现图库的页面,这种页面中可能会包含许多大型图像,我们可以通过jQuery隐藏、显示或以其他方式操作这些图像。如果我们通过onload页面设置界面,那么用户在能够使用这个页面之前,必须要等到每一幅图像都下载完成。更糟糕的是,如果行为稍微添加给哪些具有默认行为的元素(比如链接),那么用户的交互可能会导致意想不到的结果。然而当我们试用$(document).ready(){ }进行设置时,这个界面就会更早地准备好可用的正确行为。 

使用$(document).ready(){ }一般来说都要优于试用onload事件处理程序,但必须要明确一点的是,因为支持文件可能还没有家在完成,所以类似图像的高度和宽度这样的属性此时不一定有效。 

注:用把js放在页面底部的方法以及运用defer="defer" 的方法都是会出现问题的。最好使用上面的函数!
  defer详解:

<script src="../CGI-bin/delscript.js" defer></script>
中的defer作用是文档加载完毕了再执行脚本,这样回避免找不到对象的问题---有点问题

<button id="myButton" οnclick="alert('ok')">test</button>
<script>
myButton.click();
</script>

<script>
myButton.click();
</script>
<button id="myButton" οnclick="alert('ok')">test</button>

<script defer>
function document.body.onload() {
alert(document.body.offsetHeight);
}
</script>


加上 defer 等于在页面完全在入后再执行,相当于 window.onload ,但应用上比 window.onload 更灵活!

defer是脚本程序强大功能中的一个“无名英雄”。它告诉浏览器Script段包含了无需立即执行的代码,并且,与SRC属性联合使用,它还可以使这些脚本在后台被下载,前台的内容则正常显示给用户。
--但是 文档加载完毕了再执行脚本

请注意两点:
1、不要在defer型的脚本程序段中调用document.write命令,因为document.write将产生直接输出效果。
2、而且,不要在defer型脚本程序段中包括任何立即执行脚本要使用的全局变量或者函数。 

一个常用的优化性能的方法是:当脚本不需要立即运行时,在<SCRIPT>标签中设置“defer”属性。 (立即脚本没有被包含在一个function块中,因此会在加载过程中执行。) 设置“defer”属性后,IE就不必等待该脚本装载和执行完毕。这样页面加载会更快。一般来说,这也表明立即脚本最好放在function块中,并在 document或者body对象的onload 句柄中处理该函数。在有一些脚本需要依赖用户操作而执行时----例如点击按钮,或者移动鼠标到某个区域----使用该属性非常有用。但当有一些脚本需要在页面加载过程中或加载完成后执行,使用defer属性得到的好处就不太大。

script中的defer属性默认情况下是false的。按照DHTML编程宝典中的描述,对于Defer属性是这样写的:
Using the attribute at design time can improve the download performance of a page because the browser does not need to parse and execute the script and can continue downloading and parsing the page instead.
也就是说:如果是编写脚本的时候加入defer属性,那么浏览器在下载脚本的时候就不必立即对其进行处理,而是继续对页面进行下载和解析,这样会提高下载的性能。
这样的情况有很多种。比如你定义了很多javascript变量,或者在引用文件(.inc)中写了很多的脚本需要处理,那不妨在这些脚本中加入defer属性,对性能的提高肯定有所帮助。
举例如下:

<script language="javascript" defer>
var object = new Object();
....
</script>


因为defer属性默认是为false的,那么在这里

<script language="javascript" defer>

显式声明defer属性后等同于

<script language="javascript" defer=true>


声明了defer属性之后,需要判断是否有别的变量引用了defer脚本块中的变量,否则的话会导致脚本错误的产生。





HTML 中,可以使用 `window.onload` 事件来监听整个页面的所有资源(包括 `<script>` 和 `<link>`)加载完成执行相关的 JavaScript 代码。但是,如果只想监听特定的 `<script>` 和 `<link>` 资源加载完成后再执行 JavaScript 代码,可以使用以下两种方法: 1. 使用 `onload` 事件 可以使用 `onload` 事件来监听 `<script>` 和 `<link>` 资源加载完成执行 JavaScript 代码。例如: ```html <script> var script = document.createElement('script'); script.onload = function() { console.log('script loaded'); // 在这里编写需要执行的 JavaScript 代码 }; script.src = 'path/to/script.js'; document.head.appendChild(script); var link = document.createElement('link'); link.onload = function() { console.log('link loaded'); // 在这里编写需要执行的 JavaScript 代码 }; link.rel = 'stylesheet'; link.href = 'path/to/style.css'; document.head.appendChild(link); </script> ``` 2. 使用 `load` 事件 可以使用 `load` 事件来监听 `<script>` 和 `<link>` 资源加载完成执行 JavaScript 代码。但是,需要注意的是,`load` 事件只能用于某些元素(如 `<img>`、`<iframe>`、`<script>`、`<link>` 等)和 window 对象。例如: ```html <script> var script = document.createElement('script'); script.addEventListener('load', function() { console.log('script loaded'); // 在这里编写需要执行的 JavaScript 代码 }); script.src = 'path/to/script.js'; document.head.appendChild(script); var link = document.createElement('link'); link.addEventListener('load', function() { console.log('link loaded'); // 在这里编写需要执行的 JavaScript 代码 }); link.rel = 'stylesheet'; link.href = 'path/to/style.css'; document.head.appendChild(link); </script> ``` 以上两种方法都可以实现监听 `<script>` 和 `<link>` 资源加载完成后再执行 JavaScript 代码。具体使用哪种方法,可以根据实际需求和情况来选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值