2013-02-25 3 views
0

양식 노드를 생성자를 통해 전달하여 양식의 유효성을 검사하려고합니다. OO를 사용하는 것이 맨 위에 약간 있지만 요청이라고 알고 있습니다. 아래 코드가 있지만 함수 (폼)의 텍스트 상자 값을 경고하려고하면 정의되지 않은 것으로 표시됩니다. 나는 명백한 실수를하고 있다고 확신하지만 누구든지 나를 도울 수 있습니까? 감사합니다양식 이름을 생성자로 전달하여 양식의 유효성을 검사하십시오.

<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

감사합니다 !!!!! 그게 효과가 있었어. 그건 그렇고, 코드를 보면 내가해야 할 부분이 있습니까? OO없이이 작업을 수행하는 것이 더 낫지 만 여기 프로토 타입을 사용해야하는지 궁금합니다. –

+0

코드가 잘 작성되었으므로 여기서 프로토 타입을 사용하는 데 아무런 해가 없습니다. 내가 말하고자하는 것은 함수 자체가 객체라는 것을 기억하는 것입니다. 어떤 종류의 객체도 성능을 인스턴스화하는 데 특히 비용이 많이 들지만 작은 응용 프로그램에서는 명확성이 더 유용 할 것입니다. – Jodes

+0

쿨 - 고맙습니다. –

관련 문제