这可能是我忽略的简单问题,但我的 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”。
pattern
是保留字还是用于内置 js 库之一的名称?这在 Chrome 下不起作用的原因是什么?
最佳答案
因为在内部提到的浏览器将 DOM 元素作为对象附加到全局命名空间 (window
)。因此,具有 id="xyz"
的对象也可以作为 window.xyz
甚至 xyz
来寻址。我想 Chrome 不会这样做。
同时检查 my SO-question关于这个,尤其是选择的答案。
[edit] 评论后:确实与 Chrome (webkit) 相关,可能与我发现的有关 here .另见 quirksmode (在页面中搜索“模式”,它在 HTML5 中看起来像 pattern
是 input
的一个属性,所以我可以想象它会干扰具有相同名称的 id)
关于javascript - 为什么在 Chrome 上 id = 'OnClick' 时以下嵌入的 "pattern"不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6354395/