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>
4

1 に答える 1

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) {
于 2013-02-26T02:28:45.763 に答える