2013-02-25 56 views
0

我想通過構造函數傳遞表單節點來驗證表單。我知道使用面向對象是有點超過頂部,但它的要求。我已經得到了下面的代碼,但是當我嘗試提醒函數(表單)中的文本框的值時,它們會以未定義的形式出現。我確信我犯了一個明顯的錯誤,但誰能幫助我?由於通過傳遞表單名稱作爲構造函數來驗證表單

<SCRIPT LANGUAGE="JavaScript"> 
    function Validator(fields) { 
     this.fields = fields; 
    } 

    Validator.prototype.validate = function (form) { 
     for (var i = 0, l = this.fields.length; i < l; i++) { 
      alert(this.fields[i].value); 
      if (this.fields[i].value == 0) { 
       alert("The field is empty"); 
       return false; 
      } 
     } 
    } 

    var validator = new Validator(["username", "password"]); 

    function runValidate(form) { 
     validator.validate(form); 
    } 
</SCRIPT> 
</head> 

<body> 
<form NAME="AbbeyRoad"> 
    <fieldset> 
    <legend>Please login</legend> 
     <div class="form-element"> 
      <label for="username"><span class="shortkey">U</span>sername:</label> 
      <input type="text" name="username" id="username" accesskey="u"> 
     </div> 
     <div class="form-element"> 
      <label for="password"><span class="shortkey">P</span>assword:</label> 
      <input type="password" name="password" id="password" accesskey="p"> 
     </div> 
     <input type="button" name="login" value="Login" id="login" onClick="runValidate(this.form)"> 
    </fieldset> 
</form> 

回答

1

變化:

alert(this.fields[i].value); 

到:

alert(form[this.fields[i]].value); 

這:

if (this.fields[i].value == 0) { 

到:

if (form[this.fields[i]].value == 0) { 
+0

謝謝!!!!!這工作。順便說一句,看代碼,我應該改進嗎?顯然,如果沒有面向對象的情況下更好地做到這一點,但我想知道是否需要在這裏使用原型? – 2013-02-26 12:06:42

+0

您的代碼編寫得很好,在這裏使用原型沒有任何傷害。我要說的是要記住,函數本身就是對象,任何類型的對象在實例化性能方面都特別昂貴,但對於較小的應用程序來說,清晰度可能更有用。 – Jodes 2013-02-26 22:27:24

+0

很酷 - 謝謝 – 2013-02-27 10:02:30

相關問題