好的家伙,这是在闯入,
我正在测试此页面
http://static.nemesisdesign.net/demos/ie8-strange/test.html
在IE8 / Windows XP上。
这是代码:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="content-language" content="en">
<title>Test</title>
</head>
<body>
<div id="thisgivesmeanerror">test</div>
<script>
thisgivesmeanerror = 'test';
alert('this alert won\'t be fired on my IE8, what about yours?');
</script>
</body>
</html>
如果我用IE8打开此页面,我会收到错误消息。 如果我将脚本代码更改为:
<script>
// note that I added var prefix
var thisgivesmeanerror = 'test';
alert('this alert won\'t be fired on my IE8, what about yours?');
</script>
工作正常。 这只发生在IE 7/8上,没有在IE6上测试。
你怎么看? 它也发生在你身上吗?或者只是我的浏览器疯了?你是说这只是没有使用导致错误的var前缀? 我很抱歉,但你错了,你没有花时间测试代码。
我上传了一个test2页面 http://static.nemesisdesign.net/demos/ie8-strange/test2.html 与随后的cocde
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="content-language" content="en">
<title>Test 2</title>
</head>
<body>
<div id="thisgivesmeanerror">test</div>
<script>
thisdoesntgiveanyerror = 'test';
alert('This alert will be fired correcly');
</script>
</body>
</html>
工作正常。
那么实际导致错误的是什么?不带var前缀的变量名与DIV元素的ID具有相同的名称。
这不奇怪吗?
答案 0 :(得分:2)
可能this SO-question的答案有帮助吗?
答案 1 :(得分:1)
您应始终在变量声明之前加上var
来指定其范围,否则您可能会发现不同浏览器之间的行为不一致。
答案 2 :(得分:0)
我认为IE中的JavaScript解释器比FireFox和其他版本稍微严格一些,这意味着脚本在变量定义行时会返回错误。放入var
将确保 变量
使用var
詹姆斯
修改强>
目前我无法访问IE,但我建议您将<script>
代码更改为<script type="text/javascript">
。
答案 3 :(得分:0)
使用var
声明变量而不是仅插入其名称