3

始める前に、いいえ、セミコロンで見つけることができる問題はなく、関数に値を渡していません。

コンソールから関数「login()」を実行しようとすると問題なく動作しますが、HTML 入力ボタンをクリックして呼び出すと、「Uncaught TypeError: オブジェクトは関数ではありません」というメッセージが表示されます。ちなみにこれはChromeです。

var aj=new XMLHttpRequest();
var loginf=document.forms["login"];
var regf=document.forms["reg"];

function login(){
var errors=document.getElementById("login_err");
var errs=[];
var uname=loginf['uname'];
var pass=loginf['pass'];
var unameVal=uname.value;
var passVal=pass.value;

if(unameVal.length<4 && unameVal.length>0){
    errs.push("Username too short. Try again please.");
}
else if(unameVal.length>18){
    errs.push(innerHTML="Username is too long. Try again please.");
}
else if(unameVal.length==0){
    errs.push("Please enter a username.");
}

if(passVal.length<8){
    errs.push("Password too short. Try again, please.");
}
else if(passVal.length>30){
    errs.push("Password is too long. Try again please.");
}

if(errs.length==0){
    aj.onreadystatechange=function(){
        if(aj.readyState>=4 && aj.status==200){
            if(aj.responseText=="suc"){
                window.location="/new.php";
            }
        }
    }
    aj.open("POST","/inc/php/core.php",false);
    aj.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    aj.send("login=true&data="+data);
}
else{
    errors.innerHTML="<ul>";

    for(var x=0;x<errs.length;x++){
        errors.innerHTML+="<li>"+errs[x]+"</li>";
    }

    errors.innerHTML+="</ul>";
}
}

function reg(){

}

そして、入力ボタン。

<input type="button" class="submit" value="Log in" style="width:25%" onclick="login();"/>

コードに問題はありません。

このコードで Waldo を見つけることができれば、事前に感謝します。

jsFiddle ここ: http://jsfiddle.net/6sa7M/2

4

1 に答える 1

7

関数名「login」は、フォームと関数の両方への参照であることが判明しました。

「login()」を「loginUser()」に変更し、コンソールに「login」と入力すると、フォームが返されたので、実際には互いに競合していました。

本当の答えをくれたマークに感謝します。

于 2013-03-13T02:36:44.997 に答える