2017-03-05 80 views
1

我正在創建一個簡單的表單,並且我想在表單提交併成功驗證之後向控制檯寫入輸入的值。但是,當我去測試當前的進度時,我輸入了一段隨機文本,甚至在控制檯中都沒有顯示出來。下面是代碼我現在(不包括任何註釋掉的代碼):爲什麼不顯示錶格值?

<html> 
 
    <head> 
 
    <meta charset="utf-8" /> 
 
    <title></title> 
 
    <script language="Javascript"> 
 
     window.onload = function() { // So the DOM can be defined 
 
     function validateForm() { 
 
      var form = document.forms['encrypt']['text']; 
 
      if(form == "") { 
 
      alert("Enter piece of text to encrypt"); 
 
      return false; 
 
      } else { 
 
      console.log(form.value); 
 
      } 
 
     } 
 
     } 
 
    </script> 
 
    </head> 
 
    <body> 
 
    <form name="encrypt" action="#" onsubmit="return validateForm()"> 
 
     Text: <input type="text" name="text"> 
 
     <input type="submit" name="Submit and Encrypt!"> 
 
    </form> 
 
    </body> 
 
</html>

即使當我輸入什麼,並提交表單,警報不會彈出。還有其他職位與形式問題有關,但他們與我的沒有任何關係。我的代碼有問題嗎?有什麼問題,我該如何解決它?

編輯:我意識到window.onload只在窗口加載時執行它內部的代碼。之後,所有功能都不復存在。除了刪除onload處理程序之外,我必須在體內重新定位驗證功能。

回答

3

您的validateForm函數只在您的onload函數中可見。此外,您將表單與空字符串進行比較,而不是表單中文本字段中的值。 console.log也不可見,因爲頁面在您看到之前會刷新。

下面是固定這三件事的代碼。

<html> 
    <head> 
    <meta charset="utf-8" /> 
    <script> 
     function validateForm() { 
     var text = document.forms['encrypt']['text'].value; 
     if(text == "") { 
      alert("Enter piece of text to encrypt"); 
      return false; 
     } else { 
      alert("Entered '" + text + "', refreshing now."); 
      return true; 
     } 
     } 
    </script> 
    </head> 
    <body> 
    <form name="encrypt" action="#" onsubmit="return validateForm()"> 
     Text: <input type="text" name="text"> 
     <input type="submit" name="Submit and Encrypt!"> 
    </form> 
    </body> 
</html> 
+0

不會將'document.forms'設置爲'null'嗎? –

+0

對不起,你認爲哪一行是「那個」? – Bemmu

+0

您放棄了'window.onload'處理程序,並且深入瞭解,我使用'document.forms'引用了窗體。這是'validateForm()'聲明中的第一行。 –

2

沒有理由在onload事件處理程序來包裝這個功能。這樣做會限制函數定義的範圍,以致試圖調用它的代碼實際上看不到它。 (也就是說,在onload完成,你定義的函數不再在範圍和不再存在。)

就直接刪除的處理程序和定義函數:

<script language="Javascript"> 
    function validateForm() { 
     var form = document.forms['encrypt']['text']; 
     if(form == "") { 
     alert("Enter piece of text to encrypt"); 
     return false; 
     } else { 
     console.log(form.value); 
     } 
    } 
</script> 
+0

我認爲會將'document.forms'設置爲'null'。讓我試試看。 –

+0

@ObinnaNwakwue:這個函數不會*設置* document.forms到任何東西,它只是從中讀取*。 – David

0

嘗試刪除window.onload = function() {和公正保持validateForm功能。

1

問題是您的函數validateForm()在您單擊提交時無法在範圍中訪問。您可以通過在控制檯中調用此功能來驗證這一點。 在您的代碼中,它是在window.onload內部定義的,所以請將該函數移出它。