2010-06-01 265 views
3
<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); 

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

+5

我怀疑window.txtName会返回一些东西。 – 2010-06-01 12:16:38

+0

@Phillippe是正确的,它会'window.txt.value'在这里得到任何东西。 – 2010-06-01 12:18:31

+0

@Philippe:它会在IE上。 IE将'id'和'name'命名空间混合在一起,并在'window'上转储所有这些符号。 – 2010-06-01 12:20:22

回答

9
alert(window.txtName.value); 

这是错误的方式,它只适用于IE浏览器。 IE会将所有已命名和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); 
+0

@dhali:如果这个回答适合您的需求,请勾选复选标记,以便我们可以看到这个问题得到了足够的回答。 – 2010-06-01 22:21:32

0

这行代码,因为下面一行是添加textName window对象找出整个DOM即整个HTML页面

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

继可能是错误。

alert(window.txtName.value); 

CHCK更多关于这个:http://snook.ca/archives/javascript/global_variable

+1

这是不正确的。当在浏览器中运行javascript时,“window”是“全局变量作用域”对象。任何全局变量也是“窗口”对象的属性。 – 2010-06-01 12:19:43

2

在第一个方法,你发现所有对他们的name性能的txtName值的元素。从结果中,您获取第一个匹配的项目。

在第二种方法中,您依靠浏览器通过window对象上的速记属性txtName创建名称为txtName的元素。正如你所看到的,如果你知道总是有一个元素,那么这是多余的;另一个是有问题的,如果你不知道总是有一个元素。另外,在大多数浏览器中,第二种方法甚至不能工作。

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