JavaScript OnClick返回错误对象不是函数

时间:2011-10-03 02:58:36

标签: javascript dom object methods web

我有一个函数,当单击一个元素时,它会使该元素成为Object中的选定元素。让我告诉你。

var elem = new Object();
elem = {
    title:'',//string
    num:null,//number
    selected:null
}
function selected(elem){
    elem.title = elem.getAttribute("title") || this['title'];
    alert(elem.title);
    for(x=0;x<classIds.length;x++){
        if(elem.title==classIds[x].name){
            elem.num=x; 
            elem.selected=classIds[x];
            alert(elem.selected.properties);
        }
    }
}

因此,当单击某个元素时,所选函数将从元素上的onlick attr运行。哪个很酷。它工作正常。但是,如果再次单击它,浏览器会给出错误对象不是函数。仅当您连续单击同一元素时才会发生这种情况。如果单击另一个元素,则不会发生。这很奇怪,因为函数应该运行一个单独的时间并覆盖Object elem(在函数外部定义为全局变量/对象)。我有调试原因的警报。此外,数组classIds也是在函数之外定义的。任何见解都会很棒。另外,我知道我的编码有点奇怪,我真的只是从JavaScript中的对象和方法开始。

修改

Onclick的调用如下所示

<li title="+classIds[x].name+" onclick='selected(this)'>"+classIds[x].name+"</li>

所以...

onclick='selected(this)'

是电话

1 个答案:

答案 0 :(得分:1)

您的代码中存在一个非常明显的问题:您正在声明一个名为elem的全局变量(在函数外部),然后您的函数有一个名为{{1}的参数}。因此,函数中对elem的每次引用都将是参数而不是全局参数。鉴于您如何调用该函数,该参数引用您的elem元素,这意味着该函数当前正在覆盖该元素和/或在该元素上创建属性。

如果你更改参数的名称,说出<li>,那么当你的意思是全局变量时,你可以使用clickedElem,当你的意思是参数时,可以使用elem。 / p>

除此之外,我不太清楚你想要达到的目标,所以我不知道还有什么建议。

(顺便说一下,正如我在上面的评论中所说的那样,没有必要初始化clickedElem,因为在下一行你会立即指定它等于其他东西。但那不是'#1}。这会给你带来麻烦,但这是毫无意义的。)