最近做一个网站程序,在ASP.NET代码中引入了自己或他人的多个JavaScript脚本文件,测试时感到有些脚本文件没有被引用到(即,其中定义的函数不起作用),有些又被引用到了,一时感到困惑不解。见如下htm文档,其中的code2.js中的函数就没有被引用到,但code1.js和code3.js均被引用到了。
<html>
<head>
<script type="text/javascript" src="script/code1.js" />
<script type="text/javascript" src="script/code2.js"></script>
<script type="text/javascript" src="script/code3.js"></script>
</head>
<body>
<input type="button" value="ShowCode1" onclick="ShowCode1()" />
<input type="button" value="ShowCode2" onclick="ShowCode2()" />
<input type="button" value="ShowCode3" onclick="ShowCode3()" />
</body>
</html>
使用Firefox打开该网页,然后查看网页的源代码,发现code2.js引用的脚本代码不能被浏览,而code1.js和code3.js的均可以。比较该网页3行<script>代码发现,code1.js的行被写成<script type="text/javascript" src="script/code1.js" />,即采取省略格式,而不是后面两行的全标记格式。于是,改成全标记格式,code2.js就可以引用到了,问题得到解决。
查阅David Flanagan的名著《JavaScript权威指南(第五版)》,在13.2节”HTML中嵌入脚本“的13.2.2小节”外部文件中的脚本“中,特别写了”注意,即使指定了scr属性并且<script>和</script>标记之间没有JavaScript代码,结束的</script>标记也是必须的。“呵呵,劳时耗神,非他,乃自己读书不透、技艺不精哈。
总结如下:
- <script>引用外部js文件时,必须是<script ...></script>标记格式,不要采取省略形式。
- 在引用多个外部js文件时,省略了</script>将影响到该行下一行的脚本文件,即下一行脚本代码不能被引用。