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 相关文章推荐
Javascript的IE和Firefox兼容性汇编(zz)
Feb 02 Javascript
ExtJs使用IFrame的实现代码
Mar 24 Javascript
小试JQuery的AutoComplete插件
May 04 Javascript
JavaScript手机振动API
Jun 11 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
Mar 23 jQuery
浅谈Vue.js中ref ($refs)用法举例总结
Dec 19 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
Aug 29 Javascript
微信小程序基于picker实现级联菜单
Feb 15 Javascript
vue中使用微信公众号js-sdk踩坑记录
Mar 29 Javascript
Vue数据绑定实例写法
Aug 06 Javascript
详解小程序BackgroundAudioManager踩坑之旅
Dec 08 Javascript
关于JavaScript数组去重的一些理解汇总
Sep 10 Javascript
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
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
PHP开发制作一个简单的活动日程表Calendar
2016/06/20 PHP
php中mkdir()函数的权限问题分析
2016/09/24 PHP
jquery ajax 登录验证实现代码
2009/09/23 Javascript
在JQuery dialog里的服务器控件 事件失效问题
2010/12/08 Javascript
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
2011/03/30 Javascript
jquery插件开发注意事项小结
2013/06/04 Javascript
原生js操作checkbox用document.getElementById实现
2013/10/12 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
2016/01/21 Javascript
在JavaScript中使用JSON数据
2016/02/15 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
javascript加减乘除的简单实例
2016/07/12 Javascript
详解Node.js中的Async和Await函数
2018/02/22 Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
2019/04/10 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
常用python数据类型转换函数总结
2014/03/11 Python
python新手经常遇到的17个错误分析
2014/07/30 Python
用Python生成器实现微线程编程的教程
2015/04/13 Python
浅谈Python中的数据类型
2015/05/05 Python
基于python实现的抓取腾讯视频所有电影的爬虫
2016/04/22 Python
对python中使用requests模块参数编码的不同处理方法
2018/05/18 Python
python实现雨滴下落到地面效果
2018/06/21 Python
Python单元测试简单示例
2018/07/03 Python
python3.x 将byte转成字符串的方法
2018/07/17 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
使用Django实现把两个模型类的数据聚合在一起
2020/03/28 Python
Pandas读取csv时如何设置列名
2020/06/02 Python
Python如何对齐字符串
2020/07/30 Python
国际书籍零售商:Wordery
2017/11/01 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
公务员培训心得体会
2013/12/28 职场文书
2014年煤矿安全工作总结
2014/12/04 职场文书
委托书格式要求
2015/01/28 职场文书
JavaScript前端面试组合函数
2022/06/21 Javascript