【问题标题】:'Object is not a function' - onclick event'对象不是函数' - onclick 事件
【发布时间】:2013-02-28 19:53:37
【问题描述】:

在开始之前,不,我没有使用分号可以找到的问题,并且我将 NO 值传递给函数。

当我尝试从控制台执行函数“login()”时,它工作得很好,但是当我单击 HTML 输入按钮调用它时,我得到“Uncaught TypeError: object is not a function”。顺便说一下,这是在 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

【问题讨论】:

  • 如果你能给我们一个jsfiddle会更有帮助
  • 在哪一行?堆栈跟踪是什么?
  • 你可能有一个 DOM 元素,其 id 为“login”
  • 将脚本移动到头部并更改函数名称,使其不会与元素 id 冲突。注意,不是带有 name 登录的表单,带有 id 登录的 div 是冲突的。
  • 尝试更改表单或函数的名称

标签: javascript function syntax-error


【解决方案1】:

原来,函数名“login”既是对表单的引用,也是对函数的引用。

我把“login()”改成“loginUser()”,在控制台输入“login”,表单返回,确实是冲突了。

再次感谢您的所有帮助,特别感谢 Marc 的真实回答。

【讨论】:

  • 您可以通过将所有标识符放在一个命名空间下轻松避免此类冲突。
猜你喜欢
  • 2018-06-27
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多