只要我没有设置type属性,我就可以运行脚本。但是,如果没有type属性,我无法获取要验证XHTML的页面。一旦我设置它,我的错误消息就会消失,但是脚本无法正常运行。下面是代码的一部分。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>John Whiteker's Home Page</title>
<link rel="stylesheet" type="text/css" href="project.css" />
<script><!-- This is my error saying that I need to set a type attribute -->
function myFunction()
{
alert("Hello! I am an alert box!");
}
</script>
</head>
<body>
答案 0 :(得分:4)
HTML5是允许您省略type
属性并假设&#34; text / javascript&#34;的规范。每个其他版本的HTML都需要type
属性。
您正在使用XHTML Doctype。如果您想使用HTML5,请在顶部包含此Doctype:
<!DOCTYPE html>
来自MDN:&#34;如果此属性不存在,脚本将被视为JavaScript。&#34;,指的是HTML5。
参考:Difference between <script> tag with type and <script> without type?
答案 1 :(得分:2)
使用HTML5 doctype并且不指定类型属性,除非它们不是默认值。此外,不要太担心验证。这对于保持秩序很好,但你shouldn't let it get in the way of function。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>John Whiteker's Home Page</title>
<link rel="stylesheet" href="project.css" />
<script>
function myFunction() {
alert("Hello! I am an alert box!");
}
</script>
</head>
<body>
</body>
</html>
答案 2 :(得分:1)
我已经在IE,FF和Chrome的最新稳定版本中对此进行了测试。脚本工作正常,并且是有效的XHTML 1.0 Strict http://validator.w3.org/check
我唯一猜测你的脚本无法运行的原因是因为没有调用该函数。有两个简单的选择:
选项1
使用<body onload="myFunction()">
示例1:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>John Whiteker's Home Page</title>
<link rel="stylesheet" type="text/css" href="project.css" />
<script type="text/javascript">
//<![CDATA[
<!--
function myFunction() {
alert("Hello! I am an alert box!");
}
//-->
//]]>
</script>
</head>
<body onload="myFunction()">
</body>
</html>
选项2
通过添加window.onload = myFunction();
来调用该功能,这将允许您省略<body onload="myFunction()">
部分。
示例2:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>John Whiteker's Home Page</title>
<link rel="stylesheet" type="text/css" href="project.css" />
<script type="text/javascript">
//<![CDATA[
<!--
function myFunction() {
alert("Hello! I am an alert box!");
}
window.onload = myFunction();
//-->
//]]>
</script>
</head>
<body>
</body>
</html>
任何一种方法都会生成有效的XHTML 1.0 Strict,并且脚本运行正常。有关window.onload
VS <body onload=“” />
的详细信息,请查看这篇精彩的帖子window.onload vs <body onload=""/>
此外,在编写XHTML时,最好包括
//<![CDATA[
<!--
紧跟在<script type="text/javascript">
标记之后,
//-->
//]]>
在</script>
标记之前。
这个特定项目可能不需要它们,但是CDATA section is required if you need your document to parse as XML。另请参阅What is CDATA in HTML?。也许你的教授会给你包括奖励积分:)
干杯,
主