2010-07-26 45 views
0

這段代碼爲什麼會提示三個未定義的值?爲什麼此代碼提醒三個未定義的值?

<html> 
     <head> 
      <script type="text/javascript" language="javascript"> 
      function doIt(form){ 
       alert(form.elements.length) 
       for (var i in form.elements){ 
        alert(form.elements[i].value); 
       } 
      } 
      </script> 
     </head> 
     <body id="body"> 
      <form method="GET" action="http://localhost/sandbox/moving/controllers/companies/cSubmit_bid.php"> 
       <input type="button" value="Go" onclick="doIt(this.form)"> 
      </form> 
     </body> 
    </html> 

在此先感謝您。

回答

3

你有一個問題,因爲在form.elements數組是不是一個真正的數組。它是一個HTMLCollection這是一個類似數組的對象。因此它不能用for ... in循環迭代。切換到循環標準,並按預期工作。

for ... in循環實際上是爲了迭代對象的屬性。不建議用於陣列(請參閱description section here)。

1

更新:

因爲你只有一個輸入框,下面的代碼會顯示只爲一點,那就是按鍵。

Here is the working demo

你可以修改你的函數,它的調用是這樣的:

<input type="button" value="Go" onclick="doIt()"> 

    function doIt(){ 
     var form = document.forms[0]; // get first form or adjust accordingly 
     for (var i = 0; i < form.elements.length; i++){ 
      alert(form.elements[i].value); 
     } 
    } 
+0

「this」是對按鈕的引用,而不是表單。 – HoLyVieR 2010-07-26 18:31:59

+0

我正在引用表單對象形式的按鈕。那是什麼讓我得到三個未定義的值?即使在嘗試您的答案後,未定義的問題仍然存在。 – Babiker 2010-07-26 18:37:04

+0

@Babiker:請看我最新的答案。 – Sarfraz 2010-07-26 18:39:01

2

form.elements是一個類似數組的結構,它有三個屬性:length,item,namedItem。因此,對於for-in循環,您將獲得每個屬性的三個警報。常規for循環可以正常工作

相關問題