带有<script>元素</script>的type属性的JavaScript问题

时间:2013-04-14 01:26:02

标签: javascript xhtml

只要我没有设置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>

3 个答案:

答案 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?。也许你的教授会给你包括奖励积分:)

干杯,