0

問題は、userid は問題なく取得されますが、2 番目の要素「passwordfield」と残りのすべての要素が常に null を返すことです。この要素の値を取得するためのすべてのメソッドを試しましたが、常に null オブジェクトが返され、null の値にアクセスしようとすると、コードがスローされてエラーが発生します。

これが私のスクリプトです。

function formValidation() {
    var uid = document.registration.userid.value;
    document.write("<h1>" + uid + "</h1>");
    try {
        var passid = document.registration.passwordfield.value;
        document.write("<h1>" + passid.value + "</h1>");
    } catch (error) {
        alert(error);
    }
    var uname = document.getElementById("username");
    document.write("<h1>" + uname + "</h1>");
    var uadd = document.getElementById("address");
    document.write("<h1>" + uadd + "</h1>");
    var ucountry = document.getElementById("country");
    document.write("<h1>" + uncountry + "</h1>");
    var uzip = document.getElementById("zip");
    document.write("<h1>" + uzip + "</h1>");
    var uemail = document.getElementById("email");
    document.write("<h1>" + uemail + "</h1>"); 

    {
        if (passid_validation(passid, 7, 12)) {
            if (allLetter(uname)) {
                if (alphanumeric(uadd)) {
                    if (countryselect(ucountry)) {
                        if (allnumeric(uzip)) {
                            if (ValidateEmail(uemail)) {
                                if (validsex(umsex, ufsex)) {}
                            }
                        }
                    }
                }
            }
        }
    }
    return false;
}

function userid_validation(uid, mx, my) {
    var uid_len = uid.value.length;
    if (uid_len == 0 || uid_len >= my || uid_len < mx) {
        alert("User Id should not be empty / length be between " + mx + " to " + my);
        uid.focus();
        return false;
    }
    return true;
}

function passid_validation(passid, mx, my) {
    var passid_len = passid.value.length;
    if (passid_len == 0 || passid_len >= my || passid_len < mx) {
        alert("Password should not be empty / length be between " + mx + " to " + my);
        passid.focus();
        return false;
    }
    return true;
}

function allLetter(uname) {
    var letters = /^[A-Za-z]+$/;
    if (uname.value.match(letters)) {
        return true;
    } else {
        alert('Username must have alphabet characters only');
        uname.focus();
        return false;
    }
}

function alphanumeric(uadd) {
    var letters = /^[0-9a-zA-Z]+$/;
    if (uadd.value.match(letters)) {
        return true;
    } else {
        alert('User address must have alphanumeric characters only');
        uadd.focus();
        return false;
    }
}

function countryselect(ucountry) {
    if (ucountry.value == "Default") {
        alert('Select your country from the list');
        ucountry.focus();
        return false;
    } else {
        return true;
    }
}

function allnumeric(uzip) {
    var numbers = /^[0-9]+$/;
    if (uzip.value.match(numbers)) {
        return true;
    } else {
        alert('ZIP code must have numeric characters only');
        uzip.focus();
        return false;
    }
}

function ValidateEmail(uemail) {
    var mailformat = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
    if (uemail.value.match(mailformat)) {
        return true;
    } else {
        alert("You have entered an invalid email address!");
        uemail.focus();
        return false;
    }
}

function validsex(umsex, ufsex) {
    x = 0;
    if (umsex.checked) {
        x++;
    }
    if (ufsex.checked) {
        x++;
    }
    if (x == 0) {
        alert('Select Male/Female');
        umsex.focus();
        return false;
    } else {
        alert('Form Successfully Submitted');
        window.location.reload()
        return true;
    }
}

これが私のhtmlです。

<!DOCTYPE html>
<html>
<head>

<title>form</title>

<script src="hai.js" type="text/javascript" ></script>
</head>

<body>
<h1>Registration Form</h1>
<p>Use tab keys to move from one input field to the next.</p>
<form name="registration" onSubmit="return formValidation();" action="hai.js"  METHOD="POST">
    User id:
    <input type="text" name="userid" size="12" /><br>
    Password:
    <input type="password" name="passwordfield" size="12" /><br>
    Name:
    <input type="text" name="username" size="50" /><br>
    Address:
    <input type="text" name="address" size="50" /><br>
    Country:
    <select name="country">
    <option selected="" value="Default">(Please select a country)</option>
    <option value="AF">Australia</option>
    <option value="AL">Canada</option>
    <option value="DZ">India</option>
    <option value="AS">Russia</option>
    <option value="AD">USA</option>
    </select><br>
    ZIP
    <input type="text" name="zip" /><br>
    Email:
    <input type="text" name="email" size="50" /><br>
    Sex:
    <input type="radio" name="sex" value="Male" /><span>Male</span><br>
    <input type="radio" name="sex" value="Female" /><span>Female</span><br>
    Language
    <input type="checkbox" name="en" value="en" checked /><span>English</span><br>
    <input type="checkbox" name="nonen" value="noen" /><span>Non English</span><br>
    About:<br>
    <textarea name="desc" id="desc"></textarea><br>
    <input type="submit" name="submit" value="Submit" />
</form>

</body>
</html>
4

2 に答える 2

0

問題は、パスワードフィールドの前のdocument.write()です。何らかの理由でそれを呼び出すと、ドキュメントから登録変数が削除されます...理由はよくわかりません...

しかし、私はそれを「document.write」から削除し、推奨される方法でノードを追加しようとしました。

var myElement = document.createElement("h1");
myElement.appendChild(document.createTextNode("My Text here"));
document.appendChild(myElement);

それはうまくいきました...あなたはこれを読むべきです:http ://ejohn.org/blog/dom-documentfragments/ 私はそれがあなたに少し役立つかもしれないと思います:)

于 2012-12-03T19:37:20.433 に答える
0

問題は document.write にある可能性があります。ページが読み込まれた後に実行されると、ページが上書きされ、もちろん要素にアクセスできなくなります。

また、なぜ document.registration.userid を使用し、document.registration.username を使用しないのですか? ブラウザによっては、getElementById が name 属性に対して機能しない場合があります。

于 2012-12-03T19:27:43.013 に答える