我是javascript的新手,我刚刚发现了一个我从未见过的javascript行为。如果我有一个带有指定id的DOM元素,比如“x”,那么在我的javascript中,该元素会自动分配给变量x。我在chrome和safari中看到了这一点。这是javascript的文档功能吗?
例如:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form id='x'>
<input type='text' name='info' id='info'/>
<input type='submit' name='submit' value='Complete'/>
</form>
<script type='text/javascript'>
window.onload = function() {
alert( x==document.getElementById('x') );
info.value = 'Test me!';
}
</script>
</body>
</html>
加载后,它会提示为true,输入区域将显示“Test me!”。如果这是正确的行为,为什么我们需要document.getElementById?
答案 0 :(得分:10)
the HTML standard (chapter 6.2.4)中记录了此行为。
标准定义“命名元素”,它们是具有name
或id
属性集的HTML元素。 (请注意,name
属性仅在某些类型的HTML元素上定义。)
对于每个命名元素,浏览器(环境)定义相应的全局属性。
答案 1 :(得分:2)
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<div id="w"></div>
<script type="text/javascript">
alert( w );
w = null;
alert( w );
</script>
</body>
</html>
在IE8中尝试此测试。你会发现w是全局的,不能被覆盖。 改变&#34; w = null&#34; in&#34; var w = null&#34;并重新加载(清空缓存后)......
IE8在运行时检查变量并删除全局通讯员。 我真的无法等待网络开发者不再支持IE8的那一天...
提示:不要使用等于DOM元素id的变量名称.. OMG OMG
答案 2 :(得分:-2)
这是仅限IE的非标准功能。
不要依赖它。