JavaScript 中的 window onload 应该什么时候写

JavaScript 中的 window onload 应该什么时候写

1. 页内式 JS 代码

1.1 页内式 JS 代码写在 head 内部
如果 script 标签写在 head 标签内部,则位于 body 内的元素将晚于 JS 代码加载,那么其中一些获取 DOM 元素的方法将无法取得元素(返回 null)。
以下示例代码的意图是把“我要红红火火恍恍惚惚!”这一段文字变成红色,可见并没有起作用,控制台也会报错。

示例代码:test1.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>写在页内且位于head中的JS代码</title><script>document.getElementById("text").style.color = "red";</script>
</head>
<body><p id="text">我要红红火火恍恍惚惚!</p>
</body>
</html>

效果及报错信息
在这里插入图片描述
修改代码,加上 window.onload。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>页内式JS代码写在head内部</title><script>window.onload = function () {document.getElementById("text").style.color = "red";};</script>
</head>
<body><p id="text">我要红红火火恍恍惚惚!</p>
</body>
</html>

最终显示效果
在这里插入图片描述
1.2 页内式 JS 代码写在 body 结束之前
页内式 JS 代码写在 前面,则其它元素会早于 JS 代码加载,所以不用写 window.onload,当然加上也不影响什么。

示例代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>页内式JS代码写在body结束标签之前</title>
</head>
<body><p id="text">我要红红火火恍恍惚惚!</p><script>document.getElementById("text").style.color = "red";</script>
</body>
</html>

显示效果
在这里插入图片描述
1.3 结论
对于页内式 JS 代码:

如果 script 标签写在 head 标签内部,必须写 window.onload;
如果 script 标签写在 标签前面,不用写 window.onload。

2. 外链式 JS 代码

结论:外链式 JS 代码,不管 script 标签写在哪里,都需要写 window.onload。

如果 script 标签写在了 head 标签内部,那么该 JS 代码会在 HTML 文档之前加载到浏览器。
如果 script 标签写在了 前面,同样无法保证哪个文件最先结束加载,因为浏览器可能一次加载多个文件。
关于“一次加载多个文件”的个人理解:同时下载 html 文件和外链的 js 文件,并不能确定谁先下载完成。

因为脚本加载时文档可能不完整,所以模型也不完整。没有完整的 DOM,getElementsByTagName 等方法就不能正常工作。

3. 杂谈

window.onload 为什么管用?

文档对象 document 会被加载到一个浏览器窗口对象 window 里,文档对象 document 作为窗口对象 window 的一个属性存在。当窗口对象 window 触发加载完毕事件(onload)时,window.document 属性已经可以正常访问并使用。
所以在 window.onload 指派的回调函数里面,文档对象 document 是完整的,于是在里面编写的 JavaScript 代码能够访问到完整的 DOM 树。
能不能把 script 标签写在 标签之后?

最好不要把 script 标签写在 标签之后,这从 HTML 2.0 开始就是不合标准的。
按照 HTML5 标准,如果在 后再出现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android歌词效果,自定义View:Android歌词控件

TicktockMusic 音乐播放器项目相关文章汇总&#xff1a;简介之前做 TicktockMusic 音乐播放器&#xff0c;一个必要的需求肯定是歌词&#xff0c;在 github 上找了几个&#xff0c;发现或多或少都有点不满足需求&#xff0c;所以就自己动手写了一个&#xff0c;本篇文章主要介绍…

IDEA项目中 target 目录的作用

IDEA项目中 target 目录的作用 target是idea默认的编译路径&#xff0c;用来存放项目的&#xff1a;文件和目录、jar包、war包、class文件等。

java上传图片到target目录,jsp如何访问target里的图片路径

java上传图片到target目录&#xff0c;jsp如何访问target里的图片路径 昨天有个同学在做springmvc的图片上传&#xff0c;上传成功了却无法从网页中访问&#xff0c;我看了看上传后的路径&#xff0c;它用的idea编辑器&#xff0c;图片上传到了target里的目录&#xff0c;src目…

html中 为什么在页面点击提交后reset按钮就不起作用了

html中 为什么在页面点击提交后reset按钮就不起作用了 解释&#xff1a;reset的作用是恢复初始值&#xff0c;提交后页面重新加载&#xff0c;初始值已经是修改后的值了&#xff0c;并不是reset不起作用了。 你可以在提交后&#xff0c;修改几个值再reset试试&#xff0c;看是…

c:if标签不起作用

c:if标签因多余空格导致不起作用 <c:if test" ${monitorUserConfigure.monitorCycle 2 } ">selected</c:if>上面这段代码粗看没什么问题&#xff0c;但是在程序中始终不起作用。原因是test""表达式的两个引号和里面的内容有空格&#xff0c;…

RegExp:正则表达式对象

RegExp&#xff1a;正则表达式对象 1. 正则表达式&#xff1a;定义字符串的组成规则。 1. 单个字符:[] 如&#xff1a; [a] [ab] [a-zA-Z0-9_] 特殊符号代表特殊含义的单个字符: \d:单个数字字符 [0-9] \w:单个单词字符[a-zA-Z0-9_] 2. 量词符号&#xff1a; ?&#xff1a;表…

java文件下载出现文件名乱码解决办法

java文件下载出现文件名乱码解决办法 //IE、chrom、Firefox文件中文乱码问题public String processFileName(HttpServletRequest request, String fileNames) {String codedfilename null;try {String agent request.getHeader("USER-AGENT");if (null ! agent &a…

android view退出动画,android animation——view进来退出动画

在设计android项目的时候我们有时候需要对activity的进入退出做一些动画处理&#xff0c;虽然android自身已经做了动画处理&#xff0c;但是我们需要更加炫酷的动画就需要自己去写一些动画了。有时候不光activity&#xff0c;还有popupwindow或者自定义view都是需要动画的。那么…

bc8android汽车中控屛功能有哪些,丰田酷路泽中控台的8大功能 你们知道都是干什么用的?...

兰德酷路泽(参数|图片)中控台的8大功能 ①&#xff1a;高低速四驱调节高低速四驱调节系统&#xff0c;有着两个方向&#xff0c;L4和H4H4&#xff0c;指的是高速四驱&#xff0c;开启H4的时候适合走沙石路面&#xff0c;泥泞路面&#xff0c;雪地&#xff0c;沙石地等。最高车速…

关于java二维数组长度(length)的知识

关于java二维数组长度(length)的知识 二维数组的长度 //定义一个整型数组:3行4列 int a[][] new int[3][4]; //也可以 int[][] anew int[3][4]; //获取行数---3行 int lenY a.length; //获取列数---4列 int lenX a[0].length;其实很好理解&#xff0c;因为二维数组可以理解…

android 动态广告图片,android – 如何在动态壁纸的设置屏幕中添加一个admob广告视图?...

这是一个更简单的解决方案&#xff1a;创建一个显示单个广告的新首选项类型.然后,您可以在首选项的xml定义中包含该首选项类型,以显示一个或多个广告.自定义偏好类&#xff1a;public class AdmobPreference extends Preference{public AdmobPreference(Context context) {supe…

微服务和分布式的区别

微服务和分布式的区别 1.分布式 将一个大的系统划分为多个业务模块&#xff0c;业务模块分别部署到不同的机器上&#xff0c;各个业务模块之间通过接口进行数据交互。区别分布式的方式是根据不同机器不同业务。 上面&#xff1a;service A、B、C、D 分别是业务组件&#xff…

android关机背景,鍵盤消失后的Android白色背景

Video of the problem from a different user but its the same來自不同用戶的問題的視頻但是相同http://imgur.com/ca2cNZvI have a background image set as follows :我有一個背景圖像設置如下&#xff1a;.pane {background-image: url("../img/inner-banner-bg.jpg&q…

javax.servlet.ServletException: Circular view path []: would dispatch back to the current....

解决&#xff1a;javax.servlet.ServletException: Circular view path []: would dispatch back to the current… 原因&#xff1a; 当没有声明ViewResolver时&#xff0c;spring会注册一个默认的ViewResolver&#xff0c;就是JstlView的实例&#xff0c; 该对象继承自Inter…

android跌倒检测,Android跌倒检测

我正在使用加速度传感器实现跌倒检测,并创建以下代码.public void onSensorChanged(SensorEvent foEvent) {if (foEvent.sensor.getType() Sensor.TYPE_ACCELEROMETER) {double loX foEvent.values[0];double loY foEvent.values[1];double loZ foEvent.values[2];double l…

SpringBoot与SpringCloud的关系与区别

一、SpringBoot和SpringCloud简介 1、SpringBoot&#xff1a;是一个快速开发框架&#xff0c;通过用MAVEN依赖的继承方式&#xff0c;帮助我们快速整合第三方常用框架&#xff0c;完全采用注解化&#xff08;使用注解方式启动SpringMVC&#xff09;&#xff0c;简化XML配置&am…

android studio break,Android Studio IDE: Break on Exception

可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效&#xff0c;请关闭广告屏蔽插件后再试):问题:It seems my Android Studio does not want to break on any exception by default. Enabling break on "Any Exception" starts breaking within act…

SpringBoot怎么直接访问templates下的html页面

SpringBoot直接访问templates下的html问题 方法1&#xff1a;曾经&#xff1a; template下文件不允许直接访问 1、springboot项目默认是不允许直接访问template下的文件的&#xff0c;是受保护的。 所以想访问template下的html页面&#xff0c;我们可以配置视图解析器。 2、如…

php查到的内容追加到html,javascript - 请问php中如何将查询出来的结果数组转化成自己想要的格式,并在前台利用js输出到html中...

考试类型的表jx_exam_type&#xff0c;可后台添加内容考试成绩的表jx_result&#xff0c;可后台添加内容期中考试成绩表中的exam_id对应考试类型表中的id&#xff0c;也就是添加的成绩是属于期中还是期末然后使用php查询$sql"SELECT re.type, re.score, re.exam_id, et.ti…

DevOps(过程、方法与系统的统称)是什么

DevOps &#xff08;过程、方法与系统的统称&#xff09; DevOps&#xff08;Development和Operations的组合词&#xff09;是一组过程、方法与系统的统称&#xff0c;用于促进开发&#xff08;应用程序/软件工程&#xff09;、技术运营和质量保障&#xff08;QA&#xff09;部…