js放到head中失效的原因与解决方法


Posted in Javascript onMarch 07, 2017

1.今天写js碰到一个奇怪的问题,写好的js放到body里面执行,但是放到head中没有任何效果,为什么导致这种原因呢?

看失效代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <title> new document </title>
 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
 <style type="text/css">
 .login{width:40px;height:25px;line-height:25px;background-color:#4E74A5;margin-top:30px;text-align:center;color:#FFF;}
 </style>
 <script type="text/javascript" src="jquery-1.7.1.min.js"></script>
 <script type="text/javascript">
 $(".login").click(function(){
   alert(1);
   });
 </script>
 </head>
 <body>
 <input type="text" class="pass" />
 <div id="enter" class="login"> 登录</div>
 </body>
</html>

2.解决办法:把js代码放到body中,或者利用 window.onload = function(){} 代码包裹,文档加载之后再执行,以后不建议放到head中。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <title> new document </title>
 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
 <style type="text/css">
 .login{width:40px;height:25px;line-height:25px;background-color:#4E74A5;margin-top:30px;text-align:center;color:#FFF;}
 </style>
 <script type="text/javascript" src="jquery-1.7.1.min.js"></script>
 <script type="text/javascript">
 window.onload = function(){
 $(".login").click(function(){
   alert(1);
   });
 } 
 </script>
 </head>
 <body>
 <input type="text" class="pass" />
 <div id="enter" class="login"> 登录</div>
 </body>
</html>

3.原因:

因为文档还没加载,就读了js,js就不起作用了想在head里用的话,用window.onload = function(){//这里包裹你的代码}

js可以分为外部的和内部的,外部的js一般放到head内。内部的js也叫本页面的JS脚本,内部的js一般放到body内,这样做的目的有很多:

1.不阻塞页面的加载(事实上js会被缓存)。

2.可以直接在js里操作dom,这时候dom是准备好的,即保证js运行时dom是存在的。

3.建议的方式是放在页面底部,监听window.onload 或 readystate 来触发js。

4.延伸:

head内的js会阻塞页面的传输和页面的渲染。head 内的 JavaScript 需要执行结束才开始渲染 body,所以尽量不要将 JS 文件放在 head 内。可以选择在 document 完成时,或者特定区块后引入和执行 JavaScript。head 内的 JavaScript 需要执行结束才开始渲染 body,所以尽量不要将 JS 文件放在 head 内。可以选择在 document 完成时,或者特定区块后引入和执行 JavaScript。

所以在head内的js一般要先执行完后,才开始渲染body页面。为了避免head引入的js脚本阻塞流浪器中主解析引擎对dom的解析工作,对dom的渲染,一般原则是,样式在前面,dom文档,脚本在最后面。遵循先解析再渲染再执行script这个顺序。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
Jquery ui css framework
Jun 28 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
Nov 07 Javascript
JS获取当前日期和时间的简单实例
Nov 19 Javascript
不同编码的页面表单数据乱码问题解决方法
Feb 15 Javascript
Bootstrap学习笔记之js组件(4)
Jun 12 Javascript
Vue表单实例代码
Sep 05 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
Jan 19 Javascript
js实现手机web图片左右滑动效果
Dec 29 Javascript
小程序根据手机机型设置自定义底部导航距离
Jun 04 Javascript
深入理解redux之compose的具体应用
Jan 12 Javascript
js实现简单的点名器随机色实例代码
Sep 20 Javascript
Vue的过滤器你真了解吗
Feb 24 Vue.js
Bootstrap媒体对象学习使用
Mar 07 #Javascript
angular十大常见问题
Mar 07 #Javascript
Bootstrap表单控件学习使用
Mar 07 #Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
Mar 07 #Javascript
Bootstrap进度条实现代码解析
Mar 07 #Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
Mar 07 #Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
Mar 07 #Javascript
You might like
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
两个比较有用的Javascript工具函数代码
2010/02/17 Javascript
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
IE不支持getElementsByClassName最终完美解决方案
2012/12/17 Javascript
js实现鼠标滑过文字链接色彩变化的效果
2015/05/06 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
2015/07/30 Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
2016/06/06 Javascript
angular仿支付宝密码框输入效果
2017/03/25 Javascript
Angular2开发——组件规划篇
2017/03/28 Javascript
vue2.0实现前端星星评分功能组件实例代码
2018/02/12 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
使用weixin-java-tools完成微信授权登录、微信支付的示例
2018/09/26 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
layui.use模块外部使用其内部定义的js封装函数方法
2019/09/16 Javascript
nodejs环境使用Typeorm连接查询Oracle数据
2019/12/05 NodeJs
JQuery获得内容和属性方法解析
2020/05/30 jQuery
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
[34:08]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS EG
2018/03/30 DOTA
在Python的Django框架中simple-todo工具的简单使用
2015/05/30 Python
浅析Python中signal包的使用
2015/11/13 Python
Python实现简易过滤删除数字的方法小结
2019/01/09 Python
详解python中*号的用法
2019/10/21 Python
python的launcher用法知识点总结
2020/08/07 Python
AmazeUI导航的示例代码
2020/08/14 HTML / CSS
施华洛世奇中国官网:SWAROVSKI中国
2020/06/16 全球购物
大学生职业生涯规划方案
2014/01/03 职场文书
求职面试个人自我评价
2014/02/28 职场文书
机械专业求职信范文
2014/07/15 职场文书
司法工作人员群众路线对照检查材料思想汇报
2014/09/30 职场文书
2014年技术部工作总结
2014/12/12 职场文书
务虚会发言材料
2014/12/25 职场文书
mysql left join快速转inner join的过程
2021/06/30 MySQL
灵能百分百第三季什么时候来?
2022/03/15 日漫