2010-06-01 271 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 - 當您知道只有一個特定元素需要訪問時。