res*_*a87 5 html javascript internet-explorer dom quirks-mode
我之前在这个SO中提到过有关IE6/7(以及某些版本的Opera)的有趣行为,document.getElementById可以找到一个name属性已定义但不id属性的元素,这样
function f() {
    document.getElementById("a1").value = ...;
}
...
<input name="a1" ...></input>
实际上适用于这些版本.
通过网络搜索我发现了Chris Bloom的这个错误报告,其中名为Milo van der Leij的用户指出了以下内容(正如他在此w3c规范中所提到的):
在他们的辩护中:"id和name属性共享相同的名称空间."
id和name属性共享同一名称空间是什么意思?为什么这个条件足以让IE6/7/Opera在他们的JS引擎中实现这种行为?
该术语的"same namespace"意思是名称和 ID 并不是完全分开的。您可以在一个特定对象上使用相同的nameand id,但不能name="foo"在一个对象和id="foo"另一对象上使用。这就产生了冲突。
这就是那些浏览器决定实现事物的方式。每个元素还有一个全局变量,其 id 包含 dom 元素。这就是他们实施事情的方式。它不是标准的,也不是更现代的浏览器中完成事情的方式(除了一些向后兼容性)。
使用id您想要检索的任何 DOM 元素的值。在发布的表单中使用name服务器标识值。
id如果您不在一个对象上使用 an 且在另一个对象上使用相同的,则您的代码在名称和 id 之间不会发生冲突,并且为特定元素提供相同的和name通常不会出现问题。nameid
| 归档时间: | 
 | 
| 查看次数: | 2419 次 | 
| 最近记录: |