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

 更新时间:2017年03月07日 15:47:48   作者:yangzailu1990  
本文主要介绍了js放到head中有时候会失效的原因以及解决方法,具有很好的参考价值。下面跟着小编一起来看下吧

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这个顺序。

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

相关文章

  • 原生JS进行前后端同构

    原生JS进行前后端同构

    本文通过实例给大家分享了原生JS进行前后端同构的相关知识点以及相关代码,有需要的朋友参考学习下。
    2018-04-04
  • 浅析Javascript中“==”与“===”的区别

    浅析Javascript中“==”与“===”的区别

    这篇文章主要介绍了浅析Javascript中“==”与“===”的区别,非常的全面,这里推荐给小伙伴们
    2014-12-12
  • Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式

    Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverl

    我们在使用Visual Studio IDE创建Silverlight工程时,默认情况下都会自动生成一个用于调试和预览Silverlight的Web工程,该工程包含了html和aspx页面,以及Silverlight.js脚本文件。
    2010-06-06
  • 原生JS实现各种运动之匀速运动

    原生JS实现各种运动之匀速运动

    这篇文章主要为大家详细介绍了原生JS实现各种运动之匀速运动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • javascript弹出层输入框(示例代码)

    javascript弹出层输入框(示例代码)

    这篇文章主要介绍了javascript弹出层输入框(示例代码)。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • JS替换字符串中空格方法

    JS替换字符串中空格方法

    这篇文章主要介绍了JS替换字符串中&nbsp方法,非常的简单实用,附上各种示例代码,有需要的小伙伴可以参考下。
    2015-04-04
  • [js高手之路]单例模式实现模态框的示例

    [js高手之路]单例模式实现模态框的示例

    下面小编就为大家带来一篇[js高手之路]单例模式实现模态框的示例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • js获取当月最后一天实例代码

    js获取当月最后一天实例代码

    这篇文章主要介绍了js获取当月最后一天实例代码,有需要的朋友可以参考一下
    2013-11-11
  • JS输出空格的简单实现方法

    JS输出空格的简单实现方法

    下面小编就为大家带来一篇JS输出空格的简单实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • js中!和!!的区别与用法

    js中!和!!的区别与用法

    这篇文章主要介绍了js中!和!!的区别与用法,js中!的用法是比较灵活的,它除了做逻辑运算常常会用!做类型判断,可以用!与上对象来求得一个布尔值,需要的朋友可以参考下
    2020-05-05

最新评论