通过将表单名称作为构造函数传递来验证表单

时间:2013-02-25 23:08:18

标签: javascript forms oop validation

我正在尝试通过将表单节点传递给构造函数来验证表单。我知道使用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 个答案:

答案 0 :(得分: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) {