JavaScript,Doctype和Firefox

时间:2013-06-23 00:36:24

标签: javascript validation firefox doctype

我有

<!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" xml:lang="en" lang="en">
<head>
    <title>Function test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
    <script type="text/javascript">
        function doFunction(towindow)
        {
            towindow.value='2';
        }   
    </script>
</head>
<body>
    <div>
        <textarea id="outputarea" rows="6" cols="60"></textarea> <br />
        <button type="button" onclick="doFunction(outputarea)">doFunction </button>
    </div>
</body>
</html>

这不起作用。单击该按钮时,没有任何反应。

如果我删除<!DOCTYPE ....,那么一切正常。

我想保留DOCTYPE进行验证,我从W3schools website找到了这个确切的声明。代码确实有效。我使用的是Firefox 10.0。当我使用Chrome 27.0.1453.116时,问题不会发生。此外,使用Explorer 10时不会出现此问题。

似乎JavaScript,DOCTYPE声明和Firefox之间存在问题。

有什么问题?我该如何解决这个问题?

(我看到其他问题(例如参见this-1this-2this-3this-4)并提出了一些相同的问题,但他们没有帮助)

2 个答案:

答案 0 :(得分:4)

问题不在于DOCTYPE;可能是Firefox 10(现在很老了BTW)根据DOCTYPE不同地解释代码,但真正的问题是你的Javascript。

您的代码onclick="doFunction(outputarea)"并不正确;某些浏览器会猜测您希望ID为outputarea的元素,但这不是标准行为。你应该做这样的事情:

<script type="text/javascript">
    function doFunction(towindowId)
    {
        var towindow = document.getElementById(towindowId);
        towindow.value='2';
    }   
</script>
...
<button type="button" onclick="doFunction('outputarea')">doFunction </button>

此外,您应该始终在Firefox的错误控制台中检查Javascript错误 - 我在Firefox 10中测试了您的原始代码并收到错误“错误:未定义toWindowId”。

仅供参考,很少需要XHTML(严格模式或其他);您可能只想考虑常规的HTML5文档类型<!DOCTYPE html>,除非您有特定的理由需要XHTML。请参阅此文章:http://www.webdevout.net/articles/beware-of-xhtml。另请注意,W3Schools信息通常不是最新的当前趋势和实践。

答案 1 :(得分:0)

所有新网页的文件类型必需。您没有将您的网页作为XHTML提供,因此使用您现在拥有的doctype毫无意义。使用新的浏览器是因为它将所有浏览器放回到您想要的标准模式的IE6中,并且它更短更容易记忆。 <!DOCTYPE html>

Firefox 10是一个古董,我不知道为什么你认为有人使用它。忽略它。目前的版本是21。

所以只需将前两行更改为此内容即可在当前版本的Chrome和Firefox中使用:

<!DOCTYPE html>
<html>

没看IE。

此外,删除元元素。这仅适用于将您的页面保存到桌面而不是通过互联网查看的人(除非您需要)。此外,脚本标记的type属性不再需要。