Javascript 为什么';t以下嵌入式';OnClick';id=”时工作;“模式”;在铬上?
这可能是我忽略的一件简单的事情,但我的google fu没有显示任何可以解释原因的东西。以以下代码段为例(暂时忽略嵌入式js通常被认为是不好的做法):Javascript 为什么';t以下嵌入式';OnClick';id=”时工作;“模式”;在铬上?,javascript,html,google-chrome,Javascript,Html,Google Chrome,这可能是我忽略的一件简单的事情,但我的google fu没有显示任何可以解释原因的东西。以以下代码段为例(暂时忽略嵌入式js通常被认为是不好的做法): 上面将在IE8和Firefox3中打印警告消息“foobar”,但Chrome将打印“undefined”。将pattern更改为类似于pattern\uu的其他内容将按预期为所有三种浏览器打印“foobar” pattern是一个保留字还是一个内置js库的名称?这在Chrome下不起作用的原因是什么?因为在内部提到的浏览器将DOM元素作为对
上面将在IE8和Firefox3中打印警告消息“foobar”,但Chrome将打印“undefined”。将pattern
更改为类似于pattern\uu
的其他内容将按预期为所有三种浏览器打印“foobar”
pattern
是一个保留字还是一个内置js库的名称?这在Chrome下不起作用的原因是什么?因为在内部提到的浏览器将DOM元素作为对象附加到全局名称空间(window
)。因此,具有id=“xyz”
的对象也可以称为window.xyz
,甚至可以称为xyz
。我想Chrome不会这么做
还要检查这一点,尤其是选定的答案
[编辑]评论后:这确实与Chrome(webkit)有关,可能与我的发现有关。另请参见(在页面中搜索“模式”,它在HTML5中看起来像
模式
是输入
的一个属性,因此我可以想象这会干扰具有相同名称的id)不要使用全局变量按id访问DOM元素。为此,有文档.getElementById(…)
,甚至更好——几乎在任何js库/框架中都有一个选择器函数(例如jQuery中的$('yourid')
,Prototype中的$('yourid')
,等等)。它们保证了跨浏览器支持,而每个浏览器上的全局变量可能会有所不同。这并不能解释更改id是否有效。好吧,很公平,我只是按照Victor T.所说的去做。ThxYep,很有趣,我找不到关于这个的任何东西。尽管如此,我认为使用全局变量(如代码中显示的OP)是不可取的。@Kooil的解释似乎是最合理的,尽管我将doctype指定为HTML4.01,但为什么浏览器会处于怪癖模式?奇怪的是,它通过了w3验证。如果没有更好的答案,我可能会接受这个答案。@Victor t:我也不知道,但这可能是一个浏览器问题(有足够的问题需要解决@chrome:)。+1作为建议。当然,我会在实际页面中使用getElement)*
方法。尽管我仍然对我在实验中遇到的这个怪癖感到好奇。
<!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>