我有
<!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-1,this-2,this-3,this-4)并提出了一些相同的问题,但他们没有帮助)
答案 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属性不再需要。