1
<script type='text/javascript'>
function formValidator(){
// Make quick references to our fields
var username = document.getElementByName('username');
var password = document.getElementByName('password');
var email = document.getElementByName('email');

// Check each input in the order that it appears in the form!
    if(isAlphanumeric(username, "Please only use letters and numbers for you username.")){
        if(lengthRestriction(username, 8, 12)){
            if(lengthRestriction(password, 6, 15)){
                if(emailValidator(email, "Please enter a valid email address")){
                            return true;
                }
            }
        }
    }


return false;
}


function isAlphanumeric(elem, helperMsg){
var alphaExp = /^[0-9a-zA-Z]+$/;
if(elem.value.match(alphaExp)){
    return true;
}else{
    alert(helperMsg);
    elem.focus();
    return false;
}
}

function lengthRestriction(elem, min, max){
var uInput = elem.value;
if(uInput.length >= min && uInput.length <= max){
    return true;
}else{
    alert("Please enter between " +min+ " and " +max+ " characters");
    elem.focus();
    return false;
}
}

function emailValidator(elem, helperMsg){
var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
if(elem.value.match(emailExp)){
    return true;
}else{
    alert(helperMsg);
    elem.focus();
    return false;
}
}

ユーザー名、パスワード、および電子メールのテキスト ボックスで name 属性が定義されているにもかかわらず、スクリプトが機能しません。ありがとう :)。

4

4 に答える 4

2

getElementByNamedocumentオブジェクトに対して有効なメソッドではありません。指定した属性を持つ要素のコレクションを返すか、指定した属性を持つ単一の要素を返す が必要です。getElementsByNamenamegetElementById()id

// get the first element with name="username"
var username = document.getElementsByName('username')[0];

// get the first element with name="password"
var password = document.getElementsByName('password')[0];

// get the first element with name="email"
var email = document.getElementsByName('email')[0];
于 2010-06-07T10:12:09.257 に答える
2

DOM メソッド「getElementByName」はありません。getElementByIdまたはの使用を検討してください。getElementsByName

于 2010-06-07T10:15:20.573 に答える
0

document.getElementByName('username'); usernameという名前の配列または要素を返します...インデックスも追加します...つまり、document.getElementByName('username')[0];

次のようになります。

var username = document.getElementByName('username')[0];
var password = document.getElementByName('password')[0];
var email = document.getElementByName('email')[0];
于 2010-06-07T10:10:00.993 に答える
0

メソッドが呼び出され(コードにsgetElementsByNameがないことに注意してください)、複数形が示すように、一致するすべての要素を含む配列が返されます。名前ごとに項目が 1 つしかない場合は、配列から最初の項目を取得するだけです。

現在、このメソッドは DOM ノードを返します。ノードが何であるかわからない場合は、HTML タグと考えてください。タグを検証することはできません。そのvalue属性を抽出する必要があります。

これらの変更は次のように反映されます (エラー チェックなし)。

var username = document.getElementByName('username')[0].value;
var password = document.getElementsByName('password')[0].value;
var email = document.getElementsByName('email')[0].value;

ブラウザの JavaScript コンソールを見つけて、構文エラーに関する通知を受け取るか、Firefox + Firebug を使用することをお勧めします。

于 2010-06-07T10:23:07.467 に答える