问题描述
|
这可能是我所忽略的简单事情,但我的google-fu并未提出任何可以解释其原因的信息。以以下代码段为例(现在忽略嵌入式js通常被认为是不好的做法):
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">
<html>
<head>
<Meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\">
<title>
</title>
</head>
<body>
<form action=\"\">
<div>
<input type=\"text\" id=\"pattern\" value=\"foobar\">
<input type=\"button\" value=\"Alert\" OnClick=\"alert(pattern.value);\">
</div>
</form>
</body>
</html>
上面的代码将在IE8和Firefox 3中打印警告消息“'foobar \”,但Chrome将显示“'undefined \'”。将pattern
更改为类似pattern_
之类的东西将按预期为所有三个浏览器输出\'foobar \'。
“ 1”是内置js库之一的保留字还是名称?在Chrome浏览器下无法正常运行的原因是什么?
解决方法
因为在内部提到的浏览器将DOM元素作为对象附加到全局名称空间(
window
)。因此,带有“ 5”的对象也可以称为“ 6”或什至是“ 7”。我想Chrome不会这样做。
还要检查我对此的特殊问题,尤其是所选答案。
评论后的[edit]:它确实与Chrome(webkit)有关,并且可能与我在此处找到的内容有关。另请参阅quirksmode(在页面中搜索\'pattern \',看起来好像在HTML5中pattern
是input
的属性,因此我可以想象它会干扰具有相同名称的id)
, 不要使用全局变量通过id访问DOM元素。为此有document.getElementById(...)
,甚至更好-几乎所有js库/框架中的选择器函数(例如jQuery中的$(\'#yourid\')
,Prototype中的$(\'yourid\')
,等等)。它们保证为您提供跨浏览器的支持,而每种浏览器的全局变量可能会有所不同。