这些代码有什么区别?

时间:2010-06-01 12:14:08

标签: javascript

<input type='text' id='txt' name='txtName' size='20' value='testing'/>

<script type="text/javascript" language='javascript'>
  var val = document.getElementsByName('txtName');
  alert(val[0].value);
  alert(window.txtName.value);
</script>

在上面的代码中我们正在使用

alert(val[0].value);

alert(window.txtName.value);

这两种从对象中获取价值的方法。两种方式之间有什么区别,哪种方式最好。

3 个答案:

答案 0 :(得分:9)

alert(window.txtName.value);

这是错误的方式,仅适用于IE。 IE将所有named和IDd元素复制到window的属性中,因此也会将全局变量复制到其中,这会导致各种问题。不要依赖于此。

这样做的更好方法是:

alert(document.forms[0].elements.txtName.value);

假设input位于页面的第一个<form>中。您还可以使用表单名称(如果有):

alert(document.forms.someform.elements.txtName.value);

也可以缩短:

alert(document.someform.txtName.value);

虽然我不建议这样做,因为你更有可能在名字和财产之间发生冲突。

此:

alert(document.getElementsByName('txtName')[0].value);

没问题,但由于您已经输入了id='txt',因此使用它会更简单快捷,而不是依赖于非唯一name属性:

alert(document.getElementById('txt').value);

答案 1 :(得分:2)

在第一种方法中,您找到的txtName属性值为name的所有元素。从结果中,您将获取第一个匹配的项目。

在第二种方法中,您依靠浏览器通过txtName对象上的简写属性txtName访问名称为window的元素。

正如你所看到的,如果你知道总是只有一个元素,那么这是多余的;如果你不知道总有一个元素,那么另一个是有问题的。此外,在大多数浏览器中,第二种方法甚至都不起作用。

我不推荐任何访问项目的方式,而是通过id - document.getElementById('txt').value进行访问 - 当您知道只有一个特定元素要访问时。

答案 2 :(得分:0)

这行代码找出整个dom,即整个html页面

var val = document.getElementsByName('txtName');
alert(val[0].value);

以下可能是错误,因为通过以下行将textName添加到窗口对象。

alert(window.txtName.value);

更多关于此事:http://snook.ca/archives/javascript/global_variable